OOM Killer プリロード

OOM Killer プリロード

マイコンピュータにはスワップパーティション/ファイルがなく、2 GBのRAMしかありません。

時には、一部のプロセスによってメモリが飽和することがあります(到来の牙+ブラウザ+コンパイラ+...)システムが無期限に停止した場合にシステムを再起動する唯一の方法(ハードリセットを除く)は、SysRqを使用することです。

わかりました。メモリ不足キラーメモリがいっぱいになると、カーネルがOOM Killer自体を割り当てることができないため、役に立ちません。

メモリがいっぱいになったときに実際に動作するようにOOM Killerをプリロードする方法はありますか?
または、メモリがいっぱいになったときにOOM Killerがアクティブになるようにカーネルを調整できますか${TOTAL_RAM} - 10MB

答え1

私はカーネルがそれ自体、つまりoom_killerを起動するためにいくつかのメモリを予約していると確信しています。

(メモリが不足してロードできない場合は、oom_killerが何を役に立ちますか?)

答え2

カーネルは最小空きスペース自体の量。以下を使用して値を表示できます。

$ sysctl vm.min_free_kbytes
vm.min_free_kbytes = 2842

$ cat /proc/sys/vm/min_free_kbytes
vm.min_free_kbytes = 2842

この値頼るRAM容量(上記の場合は512MB)については増やすことができますが、これが問題を解決することはできないようです(OOMが速くなる確率がさらに高くなります)。

OOMキラーは、アプリケーションを終了するのに十分な空きメモリーを持っている必要があります。そうでなければ、クリスはすでに指摘したようにメモリ保持の目的を失います。

編集する:ところで、カーネルパラメータ(OOM値)を変更するだけでは、ユーザースペースプログラムの問題を解決するための最良の方法ではないと思います。カーネルは、何が起こっているのか、特定の状況を処理する方法を最もよく知っています。これらの値を使用せずに、代わりにユーザースペースプログラム(Xorg、ブラウザ)で生成されたメモリの問題を解決してください。またコメントも見てくださいmm/oom_kill.cソース文書では、カーネル開発者でさえ、OOMキラーがうまく設定された環境で多くのことをする必要があるとは信じていません。

答え3

これを防止する1つの方法は、経験的オーバーコミット処理をオフにし、オーバーコミットなしに設定することです。 sysctl vm.overcommit_memory=2 を設定し、vm.overcommit_ratio を下げます。この記事を読んでくださいカーネル文書から

特定のPIDをターゲティングすることもできます。OOMの優遇/proc/$PID/oom_adj を修正します。

答え4

システムが無期限に停止しました

なぜ停止するのか知りたい場合は、次を参照してください。回答似たような質問

中断を防ぎ、必要に応じてほぼすぐにOOM-killerを実行するには、次の手順を試してくださいEDITこの問題(注:カーネルを再コンパイルする必要があります)。

関連情報