これをシェルに入力すると、メモリが使い果たされるまで永久に書き込もうとしますx=`yes`
。カーネルのOOM-killerが割り当てるバイトがなくなり、すぐに終了する必要があることを知らせるので、メッセージを受け取ります。cannot allocate 18446744071562067968 bytes (4295032832 bytes allocated)
yes
x
cannot allocate <memory>
xrealloc
ただし、game_engine
リソース不足のために存在しないグラフィックメモリをさらに割り当てるように誰かに要求すると、要求されたメモリを割り当てるためにRAMとCPUが使用されます。
カーネルのOOM-killerがgame_engine
大容量メモリを割り当てようとする試みをキャプチャできないのはなぜですかx=`yes`
?
つまり、実行中でgame_engine
ユーザーがmemory-hog以降に新しいプロセスを作成していない場合、OOM-killerによってシャットダウンされず、私のシステムを応答せずに回復できない状態にすることが常に成功するのgame_engine
はなぜですかgame_engine
?
私はゲームエンジンを例に挙げました。なぜなら、ゲームエンジンは私の貧しい小さな統合カードに多くのメモリを割り当てる傾向があるからです。しかし、これは多くのリソース集約型Xプロセスが発生するようです。
OOM-killerが効果的ではないか、プロセスメモリを無効にできない状況がありますか?
ベストアンサー1
実際、OOMキラーに対する最善の解決策はそれを持たないことです。過度のメモリを使用しないようにシステムを設定し、それに依存するアプリケーションとライブラリの使用を拒否します。無限ディスク時代に無制限のスワップを提供するのはどうでしょうか?メモリを使わない限りスワップをコミットする必要はないでしょうか?
あなたの質問に対する答えは、OOMキラーがあなたが思うように機能しないということです。 OOMキラーは、経験的な方法を使用して終了するプロセスを選択し、ルールが常に最後の要求者が終了することを意味するわけではありません。参照。OOMキラーを飼いならす。したがって、OOMキラーが「無効」という問題ではなく、そのうちの1つが望むものとは異なる選択をすることが問題です。