Slide 1

Slide 1 text

恐怖のOOM killerを召喚 Sep. 22nd, 2022 Satoru Takeuchi twitter: satoru_takeuchi

Slide 2

Slide 2 text

やること ● 前回の動画「プロセスを殺戮する恐怖のOOM killer」で紹介したOOM killerを実際 に召喚してプロセスを殺していただく ● 発動したことをどうやって検出するかの確認

Slide 3

Slide 3 text

やってみる ● 前準備 ○ 以下コマンドの実行によって swap機能を切る ■ sudo swapoff -a ■ swap機能については別動画で今後説明予定 ● やること ○ 8GiB搭載のシステムで8GiBのメモリを使うプログラムを実行 ○ 📝 メモリは獲得後に最初に書き込むまで使用していないとみなされる ■ この機能をdemand pagingと呼ぶ(別動画で紹介予定)

Slide 4

Slide 4 text

うまくいった…のか? ● プロセスは大量にログを出して死んだ ● 実はこれはOut Of Memoryとは異なる ○ Out Of Memory: メモリを使い切ってしまった状態 ○ メモリ獲得処理の失敗 : プロセスに要求されたメモリを獲得させるとシステムのメモリを使いつくして しまうと判断した場合、獲得そのものを失敗させる ● メモリ獲得直後にデバッグメッセージを入れればわかる

Slide 5

Slide 5 text

ではどうすれば? ● いろいろ方法はあるが、一番楽なのはメモリ獲得を失敗させなくすること ● sysctlのvm.overcommit_memoryパラメタが使える ○ 値が1だと(デフォルトは0)メモリ獲得時に空きメモリ量を考慮しない ● 以下コマンド実行後に再びメモリを大量に獲得するプロセス実行 ○ sudo sysctl vm.overcommit_memory=1

Slide 6

Slide 6 text

今度は死んだ…ように見えるが、地味でよくわからない ● OOMが起きたかどうかはdmesgコマンドでカーネルログを見ればわかる ○ sudo dmesg

Slide 7

Slide 7 text

まとめ ● OOMは起きると悲しいが、意図的に召喚するのはちょっと面倒 ● 「これはOOM killerにやられたか」と思ったらdmesgを見るとよい ● dmesgを見ると、以下のようなことがわかる ○ OOMになったかどうか、OOM killerが発動したかどうか ○ OOM発生時、どのようなプロセスが存在していたか ○ どのプロセスが殺されたか