Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プロセスを殺戮する恐怖のOOM killer

プロセスを殺戮する恐怖のOOM killer

以下動画のテキストです
https://youtu.be/D13PVCaHnk0

Satoru Takeuchi
PRO

September 22, 2022
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. OOM killer出現
    ● デフォルトではカーネルの「OOM killer」という処理が動き出す

    total
    プロセスが使用中
    free
    カーネルが使用中
    解放不可能
    available
    OOM killerです

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide