私はしばらく前に、Linuxがメモリ不足でプロセスを終了することを学びました。以前は、swapoff コマンドを使用してスワップを切り離しました。通常、ループ内のメモリリークなどのバグが原因ですべてのプロセスがすべてのメモリを占有すると、誤ったプロセスを殺すのではなくシステムがハングします(技術的には本当に遅いことがわかります)。
どうすればこれを防ぐことができますか?完璧なソフトウェアはありません。私は間違ってコーディングされたプログラムを実行し、時にはこの問題に直面しています。毎回システムをリセットする必要があります。これが単に最新のカーネルの限界でしょうか?物理メモリが広くても、カーネルが物理メモリを効率的に利用するためにある程度スワップを使用していることがわかっているため、スワップをオフにすることはできません。
より小さなスワップスペースを使用することはオプションです(OOMの前の時間が短い)。
ベストアンサー1
コア十分な保存キラーは最後の手段として使用されます。実行中のプロセスに十分なメモリおよび/またはスワップ領域を提供すると、そのプロセスはトリガされません。
システムに物理メモリが不足すると、スワップ領域の使用を開始します。この時点から速度が遅くなり始め、時々劇的に遅くなります。同じ物理メモリを使用しようとするアクティブなプロセスが十分であれば、システムは実際に実行するよりもプロセスを交換するのに多くの時間を費やし始めます。
スワップ領域がほとんどなくなると、カーネルは他のプロセスを実行し続けるためにプロセスを終了し始めます。選択プロセスで使用されたOOMK基準を調査する必要はなかったため、ここでは説明できません。
回避策は次のうちの1つ以上です。
- 物理メモリの追加
- より多くの(または一部)スワップを追加します。これはディスクパーティションまたはファイルです。
- 実行中のプロセスの数またはサイズを減らす
- ランアウェイメモリを持つプロセスのコード修正
その他参考資料
各プロセスが使用できるメモリ量の制限を設定できます。この値を超えようとすると、割り当て要求は失敗します。通常、これは割り当て要求の戻り値をテストしないため、制御されていない方法または致命的な例外を持つ制御された方法でプログラムがクラッシュします。