Rain WikiWindows · Linux · Android

OOM killer

概念すべての Linux ディストリビューション

OOM (out-of-memory) killerは、システムメモリが枯渇し、解放も不可能な場合にプロセスを終了させるLinuxカーネルの機能です。通常、メモリ使用量が最も多いプロセスがOOMスコアに基づいて選択されます。OOMによる終了はすべてカーネルログに記録されます。

1終了対象の選定基準

各プロセスには /proc/<pid>/oom_score にスコアが割り当てられており、メモリ使用量に応じて増加します。/proc/<pid>/oom_score_adj を使用して -1000 から 1000 の範囲で調整が可能で、-1000 に設定するとそのプロセスは終了対象から除外されます。

2OOMによる終了の確認方法

カーネルはログに「Out of memory: Killed process」と書き込みます。journalctl -k | grep -i oom または dmesg | grep -i oom を実行することで、プロセス名やメモリ使用量を含むこれらのメッセージを確認できます。

3予防策

メモリやスワップの追加、メモリ消費の激しいサービスの制限、あるいは systemd の MemoryMax= などのオプションを使用してサービスごとに制限を設定します。一部のディストリビューションでは、メモリ負荷に基づいて早期に対処する systemd-oomd が実行されています。

OOMによる終了の調査手順

  1. カーネルログを検索する: journalctl -k | grep -i -A5 'out of memory'
  2. 終了させられたプロセスとそのメモリサイズを確認する。
  3. 現在のメモリとスワップの使用状況を確認する: free -h
  4. メモリ使用量の大きいプロセスを特定する: ps aux --sort=-rss | head
  5. スワップの追加やサービスの制限を行い、再発するかどうかを監視する。

注意点

  • 多数のプロセスに対して oom_score_adj を -1000 に設定すると、カーネルが安全に終了できるプロセスを見つけられなくなる可能性があります。
  • メモリオーバーコミット保護を理解せずに無効化すると、他の箇所で障害が発生する原因となります。

出典

  1. proc(5) マニュアルページ: oom_score および oom_score_adj man7.org
  2. Out Of Memory Management (kernel.org) kernel.org

補足: RainServerはLinuxサーバー向けの監視および安全なクリーンアップ機能を提供しており、変更内容を事前に表示して確認を求めます。

最終確認: