最近、コンピューターでメモリが不足しました(大規模なGISデータセットを操作しているときにソフトウェアをコンパイルしたことによる予期しない結果)。 OOM状態の処理方法の詳細を示すシステムログには、次の行があります。
Out of memory: Kill process 7429 (Java) score 259 or sacrifice child
それは何ですか or sacrifice child
約?確かに、物事を続けるためにいくつかの暗い儀式を熟考していませんか?
私が見つけたソースファイルから oom_kill.c 、OOM Killerは、そのようなメッセージがシステムログに書き込まれた後、識別されたプロセスの子をチェックし、プロセス自体の代わりにそれらの1つを殺すことが可能かどうかを評価します。
これは、これを説明するソースファイルから抽出されたコメントです。
/*
* If any of p's children has a different mm and is eligible for kill,
* the one with the highest oom_badness() score is sacrificed for its
* parent. This attempts to lose the minimal amount of work done while
* still freeing memory.
*/
これは、KILL
シグナルを送信するように指定されたプロセスの子processを強制終了することについて話しています。
これはOom(Out of memory)キラーです。システムのメモリが不足すると、Linuxカーネルはプロセスを強制終了してメモリを解放します。ヒューリスティックは、システムに損傷を与えることなくメモリを解放するのに最適な候補であるプロセスを決定します(通常、root所有のプロセスは最適な候補ではありません)。
詳細はこちら: OOMキラーがどのプロセスを最初に強制終了するかを決定する方法