GNU/Linux >> Linux の 問題 >  >> Linux

Linux – Oom Killerはどのプロセスを最初に殺すかをどのように決定しますか?

この回答は、sysctl vm.overcommit_memoryの値に基づいて、OOM状況が発生したときにカーネルが実行するアクションを説明しています。 。

overcommit_memoryの場合 0または1に設定されているovercommit が有効になり、プログラムは実際に使用可能なメモリよりも多くのメモリを割り当てることができます。

この状況でメモリが不足するとどうなりますか? OOMキラーはどうですか 最初に殺すプロセスを決定しますか?

承認された回答:

システムの安定性を脅かす可能性のある範囲で、メモリがプロセスによって完全に使い果たされた場合、OOMキラーが登場します。

注: カーネルが実行しようとしている残りのプロセスがスムーズに機能するために十分なメモリが解放されるまで、プロセスを強制終了し続けるのはOOMKillerのタスクです。

OOMKillerは最高のを選択する必要があります 殺すプロセス。 最高 ここでは、強制終了時に最大のメモリを解放し、システムにとって最も重要でないプロセスを指します。

主な目標は、被害を最小限に抑え、同時に解放されるメモリの量を最大化するプロセスを最小限に抑えることです。

これを容易にするために、カーネルはoom_scoreを維持します プロセスごとに。 oom_scoreを見ることができます /proc内の各プロセスの pidの下のファイルシステム ディレクトリ。

$ cat /proc/10292/oom_score

oom_scoreの値が高いほど どのプロセスでも、 OOM Killerによって殺される可能性が高くなります。 メモリ不足の状況で。

OOM_Scoreはどうですか 計算されましたか?

Davidのパッチセットでは、古いbadness()ヒューリスティックはほぼ完全に
なくなっています。代わりに、計算は、使用可能なメモリの何パーセントがプロセスによって使用されているかという単純な質問に変わります。
システム全体のメモリが不足している場合、「使用可能なメモリ」は
システムで使用可能なすべてのRAMとスワップスペースの合計です。

代わりに、OOM状況が、特定のcpuset /コントロールグループに許可された
メモリを使い果たしたことが原因である場合、「使用可能なメモリ」は、そのコントロールグループに割り当てられた
合計量です。
メモリポリシーによって課せられた制限を超えた場合も、同様の計算が行われます。いずれの場合も、
プロセスのメモリ使用量は、その常駐セット(使用しているRAMページの数)とそのスワップ使用量の合計と見なされます。

この計算により、結果として10パーセント倍の数値が生成されます。使用可能なメモリのすべてのバイトを使用している
プロセスのスコアは
1000になりますが、メモリをまったく使用していないプロセスのスコアは
ゼロになります。このスコアに対するヒューリスティックな調整はほとんどありませんが、
コードは、ルートが所有するプロセスのスコアから、わずかに多いという概念で
わずかな量(30)を差し引きます。
ユーザー所有のプロセスよりも価値があります。

適用されるもう1つの微調整は、各プロセスのoom_score_adj変数に格納されている値を追加することです。これは/procを介して調整できます。
このノブを使用すると、各プロセスの魅力をOOMに調整できます。
ユーザースペースのキラー。 -1000に設定すると、OOM
キルが完全に無効になりますが、+ 1000に設定すると、関連するプロセスに
大きなターゲットをペイントするのと同じです。

参考資料

関連:ハイパフォーマンスコンピューティングでchrootを使用する場合の欠点は?

http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process https://serverfault.com/a/571326


Linux
  1. Linuxでゾンビプロセスを強制終了する方法

  2. コマンドを使用してLinuxでプロセスを強制終了する方法は?

  3. Linuxのメモリ不足キラー

  1. Linux カーネルの copy_from_user は内部でどのように機能しますか?

  2. Linux でプロセスを一時停止/再開する方法

  3. pip は、使用する Linux ホイールの数をどのように決定しますか?

  1. Linuxでゾンビプロセスを見つけて殺す方法

  2. 応答しないLinuxシステムで最大のプロセスを強制終了する方法

  3. Linux でメモリ使用量はどのように報告されますか?