参考動画
動画の要点
- 意図的にOOMを発生させるのはひと手間かかる
- なぜなら、使い切るレベルのメモリ獲得はOSにより阻止されるため
- dmsegでカーネルログを見ればOOMが発生したかがわかる
視聴後の調査
そもそもOOMとは?を調べた
OOMとはメモリ確保時にエラーを出す説や、
OOMとは、コンピュータプログラムの代表的な実行時エラーの一つで、必要なメモリ容量を確保できず、それ以上処理を続行できないこと。システムの空きメモリが足りないために起きる。
メモリを使い果たした際にエラーが出る説があり、
通常、このメッセージは、システムがスワップ空間 (仮想メモリー) を使い果たしたことを示します。
文脈からどちらの意味が適しているかを忖度してあげる必要がありそう。動画では後者をOOMとして捉えているようです。共通して言えることはOOMが発生している = システムにメモリが足りていない
OOMを意識するケースは?
- 不可解なプロセスの突然死 ( OOMが発生したから、OOM Killerによってプロセスが殺された説 )
Linux上で重要なアプリケーションのプロセスが突然死んだけど、アプリケーションのログを見ても何もエラーが出力されていない、という経験はありませんか?そのような場合、システムのメモリ枯渇によりOOM Killerがそのプロセスを停止させた可能性があります。
他にOOMが発生した方法を確認する方法はあるか
- centos の場合は
/var/log/messages
にも記録されるようです。ubuntu ってデフォルトでは /var/log/messages が無いのか。
OOM Killerによるプロセス停止のログが/var/log/messagesに出力されるので、まずはそれを確認します。
広い意味での対策
言語や、OOMの意味(確保の失敗 or 使い切り)によりやるべきことも変わるので網羅は難しい。とりあえず、見つけたのは以下。
- プロセス毎にOOM Killerによるプロセス停止の優先度を設定する
- OOMが発生した際の調査方法 (JVM用)