5.3.12. /proc/<PID>/
OOM (Out of Memory) は、スワップ領域を含む利用可能なメモリーがすべて割り当てられているコンピューティング状態を指します。この状況が発生すると、システムがパニックになり、期待どおりに機能しなくなります。
/proc/sys/vm/panic_on_oom
には OOM の動作を制御するスイッチがあります。1
に設定すると、カーネルは OOM でパニックになります。0
の設定は、OOM で oom_killer
という名前の関数を呼び出すようカーネルに指示します。通常、oom_killer
は不正なプロセスを強制終了でき、システムは存続します。
これを変更する最も簡単な方法は、新しい値を
/proc/sys/vm/panic_on_oom
にエコーすることです。
~]# cat /proc/sys/vm/panic_on_oom 1 ~]# echo 0 > /proc/sys/vm/panic_on_oom ~]# cat /proc/sys/vm/panic_on_oom 0
また、
oom_killer
スコアを調整することで、プロセスが強制終了される優先順位を設定することもできます。/proc/<PID>/ に
は、oom_adj
と oom_score
の 2 つのツールがラベル付けされています。oom_adj
の有効なスコアは、-16 から +15 の範囲にあります。現在の oom_killer
スコアを表示するには、プロセスの oom_score
を表示します。oom_killer
はスコアが最も高いプロセスを最初に強制終了します。
この例では、PID が 12465 のプロセスの oom_score を調整して、
oom_killer
がこれを強制終了する可能性が低くなります。
~]# cat /proc/12465/oom_score 79872 ~]# echo -5 > /proc/12465/oom_adj ~]# cat /proc/12465/oom_score 78
また、-17 には特殊な値があり、そのプロセスの
oom_killer
を無効にします。以下の例では、oom_score
は 0 の値を返します。これは、このプロセスが強制終了されないことを示しています。
~]# cat /proc/12465/oom_score 78 ~]# echo -17 > /proc/12465/oom_adj ~]# cat /proc/12465/oom_score 0
badness ()
と呼ばれる関数は、各プロセスの実際のスコアを決定するために使用されます。これには、確認した各プロセスに 'points' を追加します。プロセススコアは以下の方法で行われます。
- 各プロセスのスコアは、メモリーサイズになります。
- (カーネルスレッドを含まない)プロセスの子のメモリーサイズもスコアに追加されます。
- プロセススコアは 'niced' プロセスのスコアを増やし、長時間実行されるプロセスの場合に減少します。
CAP_SYS_ADMIN
およびCAP_SYS_RAWIO
機能を持つプロセスのスコアは減少します。- 最後のスコアは、
oom_adj
ファイルに保存されている値でビットシフトされます。
したがって、
oom_score
値が最も高いプロセスは、おそらく特権のない、最近起動したプロセスであり、その子とともに大量のメモリーを使用し、'niced' があり、生の I/O を処理しません。