
マイコンピュータにはスワップパーティション/ファイルがなく、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キラーがうまく設定された環境で多くのことをする必要があるとは信じていません。