OOMのキラー歯を再度与えるにはどうすればよいですか?


12

かつて私は、OOMキラーが過度に攻撃的であり、使用していたアプリを殺したことを呪っていました。不正なプログラムのために15分間定期的にシステムがスラッシングするのを定期的に監視し、キーボードに反応しないため、最終的に強制電源オフに頼るとき、私は自分が思っていたよりも良くなっていることに気付きました当時。

OOM-killerを古い血に飢えた方法に戻すにはどうすればよいですか?


1
問題の原因となっているプログラムを見て、彼らが吸い込むことができるメモリの量を制限するlimits.conf
LawrenceC

回答:


4

使用可能なスワップスペースの量を減らします。最近の一般的なインストールでは、物理メモリと同じ量(または2倍)のスワップを割り当てようとします。これに伴う問題は何かがゆがんで行く時に、システムがディスクへのメモリ、およびバックから物事を「シャッフル」にしようとの死のスパイラルに入るということであり、それはやって起動するので、あまりのことに、それが応答する時間がありません。ユーザー入力に。

古き良き時代には、プロセス全体がディスクにスワップアウトされ(そしてその逆に)されたため、大きなスワップが必要でした。

最新の仮想メモリシステムでは、メモリは(プロセス全体ではなく)ブロック単位でスワップアウトされるため、より小さなスワップで対応できます。あなたのシナリオでは、プロセスを強制終了するほうがよいでしょう。したがって、小さなスワップで実行すると、OOMはプロセスを強制的に強制終了します(システムがディスクとの間で大量の時間をスワップするよりも)。


スワップがゼロで、配列などにプッシュするよりもクロムの無限JavaScriptループがある場合、システムは20分以上ロックします。私のシステムが役に立たなくなる前にトリガーするためにOOMKが必要です。
ジェイソンウーフ

0

ここに私のために働いたものがあります:

echo 1 > /proc/sys/vm/oom_kill_allocating_task

これがこのブートの場合です。ブラウザのインス​​ペクタのコンソールタブで次を実行してテストできます。

a = []; while (true) { a.push(1); }

この設定に満足している場合は、今後のすべてのブートでデフォルトを使用できます。

echo "vm.oom_kill_allocating_task=1" >> /etc/sysctl.conf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.