私はしばらく前に、Linuxがメモリ不足でプロセスを終了することを学びました。以前は、swapoff コマンドを使用してスワップを切り離しました。通常、ループ内のメモリリークなどのバグが原因ですべてのプロセスがすべてのメモリを占有すると、誤ったプロセスを殺すのではなくシステムがハングします(技術的には本当に遅いことがわかります)。
どうすればこれを防ぐことができますか?完璧なソフトウェアはありません。私は間違ってコーディングされたプログラムを実行し、時にはこの問題に直面しています。毎回システムをリセットする必要があります。これが単に最新のカーネルの限界でしょうか?物理メモリが広くても、カーネルが物理メモリを効率的に利用するためにある程度スワップを使用していることがわかっているため、スワップをオフにすることはできません。
より小さなスワップスペースを使用することはオプションです(OOMの前の時間が短い)。
答え1
コア十分な保存キラーは最後の手段として使用されます。実行中のプロセスに十分なメモリおよび/またはスワップ領域を提供すると、そのプロセスはトリガされません。
システムに物理メモリが不足すると、スワップ領域の使用を開始します。この時点から速度が遅くなり始め、時々劇的に遅くなります。同じ物理メモリを使用しようとするアクティブなプロセスが十分であれば、システムは実際に実行するよりもプロセスを交換するのに多くの時間を費やし始めます。
スワップ領域がほとんどなくなると、カーネルは他のプロセスを実行し続けるためにプロセスを終了し始めます。選択プロセスで使用されたOOMK基準を調査する必要はなかったため、ここでは説明できません。
回避策は次のうちの1つ以上です。
- 物理メモリの追加
- より多くの(または一部)スワップを追加します。これはディスクパーティションまたはファイルです。
- 実行中のプロセスの数またはサイズを減らす
- ランアウェイメモリを持つプロセスのコード修正
その他参考資料
各プロセスが使用できるメモリ量の制限を設定できます。この値を超えようとすると、割り当て要求は失敗します。通常、これは割り当て要求の戻り値をテストしないため、制御されていない方法または致命的な例外を持つ制御された方法でプログラムがクラッシュします。
答え2
これは長い間私を悩ませてきた古い質問です。 Linuxの私の経験によると、OOMキラーが破損しています。これはうまくいきません。 Chromeブラウザは死にません。他のプロセスは終了しません。今朝、Tumblerdプロセスは2.1GBを使って私のシステムをほとんどクラッシュさせました。痛みを伴う凍結システム(下のキーボードショートカットのおかげで生き残った)で3分待っても、Linuxは2.1GBのプロセスを終了せず、これは機能しないという追加の証拠です。
私は誰かがそれがうまくいくかどうか尋ねようと思っているのではありません。いつものbla bla bla...(失礼ですね)
この問題を解決する唯一の方法は、常にfree -hを使用して利用可能なメモリを監視することでした。そうしないと、短い時間しきい値を見逃してシステム全体が停止し、ハードリセットが発生する可能性があります。すべてのChromiumプロセスを終了するスクリプトのために、キーボードショートカットがXFCEに設定されています。これは私の特定のユースケースには十分です。しかし、「最も多くのメモリを使用するプロセスを終了する」方法を見つけることができれば、それは良いでしょう(これまでの朝早く起こった停止のために現在探しています)。
まず、次のコマンドを使用して終了するプロセスをテストします。
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
#
killall tumblerd
# (optional)
空のテキストファイルに貼り付けてSOMETHING.SHとして保存し、chmod a + x / path / to / SOMETHING.SHを実行して実行可能にし、キーボードショートカットに割り当てます(XFCEで可能)。
タンブラッドプロセスに関する問題を回避する最善の方法は、ビデオサムネイルの作成のみを担当するため、システムからそれを削除することです。
sudo apt remove tumbler
したがって、この記事を読んでいる人なら、LinuxのOOMキラーが破損していると疑っても間違っているわけではありません。
編集:私の間違いは、ホットキーアクティベーションスクリプトでsudoを使用しないことです。そうしないと、端末で直接実行した場合にのみパスワードの入力を求められないため、残りのスクリプトは実行されません。