OOM(Out of Memory)。嫌な響きですね…。
なぜ嫌かと言うと、OOMが発生することで、予期せぬプロセス停止(Kill)が発生するからです。
そのことを「OOM Killer」と言います。
空きメモリを確保するための仕組みですが、業務上必要なプロセスをKillされることもあるため、大事なプロセスについてはOOM Killerの対象にならないようにしたいところ。
OOM Killerは、各プロセスの「oom_score」値を参照し、その値が高いものをkillする対象として選択します。
「oom_score」は以下のコマンドで確認できます。
1 |
cat /proc/[pid]/oom_score |
※pidはプロセスIDです。
「oom_score」ですが「oom_adj」によって調整されます。
oom_adjの有効な値は「-16」から「+15」の範囲。
そしてここからが重要。
「oom_adj」ですが、その有効範囲外の値「-17」を指定することで、そのプロセスを「OOM Killer」の対象から外すことができます。
つまり、プロセスを「OOM Killer」にkillされないようにするためには、そのプロセスの「oom_adj」を「-17」 に設定すれば良いことになります。
設定方法は以下の通りです。
非常に簡単。
1 |
echo -17 > /proc/[pid]/oom_adj |
※pidはプロセスIDです。
Killされたくないプロセスにはこの設定をいれておきましょう!