OOM-Killerが要求が多すぎるプロセスを直接終了できないのはなぜですか?

OOM-Killerが要求が多すぎるプロセスを直接終了できないのはなぜですか?

ここで説明してください:Linuxはメモリが不足しているかどうかを尋ねずにプロセスを終了し始めますか?OOM-Killerはovercommit_memory次の方法で設定できます。

  • 2 = 過度に使用されない。要求が多すぎると、割り当ては失敗します。
  • 0、1 =過度に使用される(経験的または常に)。殺す一部実際には、あまりにも多くのメモリにアクセスするときのいくつかの経験的方法に基づくプロセスです。

さて、私はこれを完全に誤解しているかもしれませんが、実際にあまりにも多くの割り当てられたメモリにアクセスしようとするプロセスを終了するオプション(またはデフォルトオプションではない理由)がないのはなぜですか?

答え1

次の状況を考えてみましょう。

  • 4GBの利用可能なメモリがあります。
  • 欠陥のあるプロセスには3.999 GBが割り当てられます。
  • タスクマネージャを開き、ランアウェイプロセスを終了します。タスクマネージャは0.002GBを割り当てます。

終了するプロセスがメモリを要求した最後のプロセスである場合、タスクマネージャは終了します。

または:

  • 4GBの利用可能なメモリがあります。
  • 欠陥のあるプロセスには3.999 GBが割り当てられます。
  • タスクマネージャを開き、ランアウェイプロセスを終了します。 Xサーバーは、タスクマネージャウィンドウを処理するために0.002GBを割り当てます。

これで X サーバーがシャットダウンしました。

それは問題を引き起こさなかった。ちょうど「間違った時間に間違った場所にいたもの」でした。メモリが残っていないときは、最初に多くのメモリを割り当てるプロセスにもなりますが、もともとすべてのメモリを使用するプロセスではありません。

答え2

この質問は長い間私を悩ませてきました、そして私は「Linuxの支持者」がOOM Killerを今まで発明された最高のツールとして宣伝していることを発見しました。 (ほとんどの人が毎日Linuxを使用しているのだろうか?

私の経験(多くのハングとクラッシュ、ハードリブート、および回復不能な多くの痛みを伴う無駄な時間)に基づいて、OOM Killerの私の理解は、OOM Killerが破損して機能しなくなり、本質的に欠陥があることです。元の記事で述べたように、主犯(Windozeのようにより多くのメモリを割り当てるアプリケーション...)を殺すのではなく、大規模な大規模なプロセスを殺すために設計されています。これは周辺プロセスには影響しません。 。結果がどうでも構いません。

私にとって、このLinux OOM Killerは、コンピュータのメモリが128MB未満で、インターネットブラウザが存在する前に設計されているようです。これは今日の基準では非実用的であり、役に立たない。

次のコマンドは、キーボードショートカットを割り当てるのに役立ちます。

まず、次のコマンドを使用して終了するプロセスをテストします。

ps aux | grep STRING
ps aux | grep PORTION_OF_NAME_WITHOUT_QUOTES_OR_SPACES

終了するプロセスが表示されたら、以下のスクリプトで括弧内に入れます。

#!/bin/bash
#
kill -9 $(ps aux | grep type=renderer)
# the above will kill all my Chromium processes
# without having to restart my entire browser or losing progress
# incognito window will be kept alive, instead of lost
#
sudo killall tumblerd
# (optional)

または、より良い方法は次のとおりです。

sudo apt remove tumbler

関連情報