OOMキラーはどのプロセスを最初に終了するかをどのように決定しますか?

OOMキラーはどのプロセスを最初に終了するかをどのように決定しますか?

これ答えは、OOM条件が発生したときの値に基づいてカーネルが取るアクションを説明しますsysctl vm.overcommit_memory

overcommit_memory0または1に設定すると、アクティブになり、overcommitプログラムが実際に使用可能なメモリよりも多くのメモリを割り当てることができます。

さて、このような状況でメモリが足りなくなったらどうなりますか?どのようにOOMキラーどのプロセスを最初に終了するかを決定します。

ベストアンサー1

システムの安定性を脅かすほどプロセスによってメモリが枯渇すると、OOM キラーが表示されます。

メモ:OOM Killerの使命は、カーネルが実行したい残りのプロセスがスムーズに実行できるように十分なメモリが確保されるまでプロセスを終了し続けることです。

OOM Killerを選択する必要があります。最高殺すプロセスです。最高これは、シャットダウン後に最大のメモリを解放するプロセスを意味し、システムにとって最も重要ではないプロセスでもあります。

主な目的は、最小限のプロセス数を終了することで、ダメージを最小限に抑えながら解放されたメモリ量を最大化することです。

これを容易にするために、カーネルはoom_scoreプロセスごとに1つずつ保持します。このディレクトリの下にあるファイルシステムoom_score内の各プロセスに関する情報を表示できます。/procpid

$ cat /proc/10292/oom_score

プロセスの価値が高いほど、oom_score終了する可能性が高くなります。メモリオーバーフローキラーメモリ不足の場合。

どのように計算されますかOOM_Score

Davidのパッチセットでは、既存のbadness()ヒューリスティックはほぼ完全に消えました。代わりに、計算はプロセスで使用可能なメモリの数パーセントを使用しているかどうかについての簡単な質問です。システムのメモリ全体が不足している場合、「使用可能なメモリ」は、システムで利用可能なすべてのRAMとスワップ領域の合計です。

逆に、特定のCPUset /制御グループに許可されたメモリが使い果たされてOOM条件が発生した場合、「使用可能メモリ」はその制御グループに割り当てられた合計量です。メモリポリシーによって課される制限を超えても、同様の計算が行われます。各場合、プロセスのメモリ使用量は、常駐セット(使用中のRAMページ数)とスワップ使用量の合計と見なされます。

この計算により、パーセンテージに10を掛けた結果が得られます。使用可能なメモリ内のすべてのバイトを使用するプロセスは1000ポイントを受け取り、メモリをまったく使用しないプロセスは0ポイントを受け取ります。このスコアの経験的な調整はほとんどありませんが、ルート所有プロセスはユーザー所有プロセスよりもわずかに価値があるため、コードはまだルート所有プロセスのスコアから少量(30)を差し引いています。

適用された別の調整は、各プロセスのoom_score_adj変数に格納された値を追加することでした。この値は/ procで調整できます。このノブを使用すると、ユーザー空間で各プロセスがOOMキラーにどれほど魅力的であるかを調整できます。 -1000 に設定すると OOM キリングが完全に無効になり、+1000 に設定すると関連プロセスに大きなターゲットを描画するのと同じです。

引用する

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

おすすめ記事