メモリ不足のメッセージとは何ですか:子供を犠牲にしますか?


20

私のコンピューターは最近、メモリ不足になりました(大規模なGISデータセットを操作しているときにソフトウェアをコンパイルすると予期しない結果になります)。OOM状態の処理方法の詳細を示すシステムログには、次の行があります。

Out of memory: Kill process 7429 (java) score 259 or sacrifice child

それはどうor sacrifice childですか?確かに、物事を続けるために暗黒の儀式を考えているのではないでしょうか?

回答:


8

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.
 */

Firefox(Webコンテンツ)でも同様です。
neverMind9

2

シグナルを送信するように指定されたプロセスの子プロセスを強制終了することKILLです。


2
しかし、それはどういう意味ですか?親が自分自身を救うために子供を「犠牲にする」ことができる方法はありますか?
タナトス

単なる推測である私の推測は、すべてのプロセスがLinux initプロセスの子孫であるため、このコンテキストの親は子プロセスがさまざまなアプリケーションであるLinuxプロセスであるということです。この場合、Linuxプロセスは、その子の1つを殺すことによって自身を保存します。
シーマス

0

これはOom(Out of memory)キラーです。システムのメモリが不足すると、Linuxカーネルはプロセスを強制終了してメモリを解放します。ヒューリスティックは、システムを損傷することなくメモリを解放するのに最適なプロセスを決定します(通常、ルート所有プロセスは最適な候補ではありません)。

詳細はこちら:OOM killerはどのプロセスを最初にkillするかをどのように決定しますか?


4
ただし、これはメッセージの「または犠牲の子供」の部分を説明しません。
マーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.