Menu Close
Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
E.3.12. /proc/PID/
Out of Memory (OOM) とは、swap 領域を含むすべてのメモリ空き容量が割り当て済みの状態であることを指します。このような状態が発生した場合には、システムがパニックを起し、正常機能を停止してしまいます。OOM の動作を制御するスイッチは、
/proc/sys/vm/panic_on_oom
にあります。1
に設定すると、カーネルは、OOM でパニックを起こします。0
は、カーネルが oom_killer
という名前の関数を OOM に対して呼び出すように指示します。通常、 oom_killer
はローグプロセスを強制終了し、システムは稼働状態を維持することができます。
この設定を変更する最も簡単な方法は、
/proc/sys/vm/panic_on_oom
に新たな値を echo する方法です。
# 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 of a process を調整し、
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()
と呼ばれる関数は、各プロセスの実際のスコアを判断するのに使用されます。これは、検討の対象となる各プロセス用に「ポイント」を加算することによって実行されます。プロセスのスコア調整は以下の方法で行われます:
- 各プロセスのメモリサイズが、スコアのベースとなります。
- プロセスの子プロセス (カーネルスレッドは除く) のメモリサイズも、このスコアに加算されます。
- 'niced' (nice 度の高い) プロセスにはプロセスのスコアが加算され、長時間実行されているプロセスには削減されます。
CAP_SYS_ADMIN
及びCAP_SYS_RAWIO
の機能に伴うプロセスは、スコアが削減されます。- 最終スコアは、
oom_adj
ファイルに保管されている値によってビットシフトされます。
従って、
oom_score
値が最も高いプロセスは、優先されず、最近開始したプロセスの可能性が高く、これはその子プロセスとともに、大容量のメモリを使用し、「nice 度が高く」、raw I/O を一切処理しないものです。