Slide 1

Slide 1 text

プロセスを殺戮する 恐怖のOOM killer Sep. 22nd, 2022 Satoru Takeuchi twitter: satoru_takeuchi

Slide 2

Slide 2 text

やること ● 前回の動画「Linuxのメモリ管理入門 デモ編」で匂わせた伏線の回収 ● システムのメモリ枯渇時に何が起きるのかを確認

Slide 3

Slide 3 text

おさらい: システムのメモリ使用量のうちわけ total プロセスが使用中 free カーネルが使用中 解放可能 解放不可能 available

Slide 4

Slide 4 text

おさらい: 空きメモリが減ってくると… total プロセスが使用中 free カーネルが使用中 解放可能 解放不可能 available せまくてつらい

Slide 5

Slide 5 text

おさらい: カーネルの解放可能メモリを解放 total プロセスが使用中 free カーネルが使用中 解放不可能 available つらくなくなった 解放可能

Slide 6

Slide 6 text

疑問: 解放可能メモリが無くなるとどうなる? ● こういう状態のことを「Out of Memory(OOM)」と呼ぶ total プロセスが使用中 free カーネルが使用中 解放不可能 available もぅマヂ無理。。。

Slide 7

Slide 7 text

OOM killer出現 ● デフォルトではカーネルの「OOM killer」という処理が動き出す ● total プロセスが使用中 free カーネルが使用中 解放不可能 available OOM killerです

Slide 8

Slide 8 text

メモリ枯渇の主因となっているプロセスを推測 total プロセスが使用中 free カーネルが使用中 解放不可能 available プロセスAがたくさんメモリを使っとるな … プロセスAのメモリ

Slide 9

Slide 9 text

推測したプロセスを強制終了させる total プロセスが使用中 free カーネルが使用中 解放不可能 available 死んで プロセスAのメモリ ウワァァァ!

Slide 10

Slide 10 text

freeメモリができあがって万事解決 total プロセスが使用中 free カーネルが使用中 解放不可能 available やったね

Slide 11

Slide 11 text

OOM発生時の挙動変更: 個々のプロセス ● /proc//oom_score_adj ● 値の意味 ○ -1000から1000の値を設定(デフォルトは0) ○ 低いほどOOM killerによる殺害対象になりにくい ○ -1000だとOOM killerによる殺害対象から外される

Slide 12

Slide 12 text

OOM発生時の挙動変更: システム全体 ● vm.panic_on_oom sysctlパラメタ ● 値の意味 ○ 0: 必ずOOM killer発動 ○ 1: 物理メモリが残っている場合は OOM killer。それ以外はカーネルパニック ■ 例: memory cgroupなどによって特定のプロセス群のメモリ使用量を制限している場合 ○ 2: 必ずカーネルパニック ● OOM killerではなくパニックさせる意味は? ○ OOM killerによってシステムにとって必須なプロセスが死んだときは運用継続してもしょうがないと きがある ○ パニック時にカーネルダンプを取得するなどして、 OOMに至った理由を知りたいことがある

Slide 13

Slide 13 text

まとめ ● システムのメモリが枯渇するとOut Of Memoryという状態になる ● デフォルトではOOM killerというカーネルの処理が動作する ● OOM killerは「こいつを殺せばメモリ不足解消に一番よさそう」というプロセスを選 んで強制終了させる ● OOM状態になったときの挙動は変更できる ○ 📝 LinuxにおけるOOM発生時の挙動 ○ https://zenn.dev/satoru_takeuchi/articles/bdbdeceea00a2888c580