私はすべての種類の自動OOMキラーを非常に嫌い、これらの状況を手動で解決することを好む。だから私は長い間
vm.overcommit_memory=1
vm.overcommit_ratio=200
ただし、これにより、メモリがオーバーフローするとシステムが応答しなくなります。 HDDと6GBのRAMを搭載した従来のノートブックでは、テキストVTに切り替え、いくつかのコマンドを実行して実行されるまで数分待たなければならないことがありました。そのため、このような状況を事前に気付くことができる成果指標が多く、それがなぜ必要なのか質問をよく受ける方だ。そして常に役に立つわけではありません。ノートブックを使用しないときにメモリオーバーフローが発生すると、遅すぎるためです。
SSDと12GBのRAMを備えた最新のノートパソコンでは、より良いと思いましたが、実際には悪いです。最大16.4 GBの圧縮スワップスペースを可能にするzRamがあり、ほとんど使い果たされるvm.swappiness=200
と、システムが従来のラップトップよりも応答しなくなり、VTスイッチもほとんど機能せず、ローカルからシステムにSSH接続できません。したがって、私の唯一の手段は、Alt + SysRq + RFを使用してカーネルの手動OOMを盲目的に呼び出すことです。時には重要なプロセスを終了することを選択します。たとえば、dbus-daemon
スワップがほぼいっぱいになったときにサウンドアラートを持つデーモンを作成することもできますが、これは再び発生しました。部分的には臨時方便で、とにかく時間内にそこに到着できないようでしたからです。
過去にはthrash-protect
。貪欲なプロセスに転送SIGSTOP
し、自動的にSIGCONT
-sを実行してロック全体を延期し、問題を手動で解決するのに多くのことができますが、深刻な過負荷の状況ではほとんどすべてが凍結し始めます(許可リストとして明示的にリストされる)することができます)。そしてそれは多くの刺激的な副作用を持っています。たとえば、シェルが固定されている場合、その子プロセスは、シェルが固定解除された後でも固定されたままになる可能性があります。両方のプロセスがメッセージバスを共有し、プロセスの1つが停止すると、メッセージが急速にバスに蓄積され、RAM使用量が急激に増加または停止する可能性があります(グラフィックサーバーとマルチプロセスブラウザは特にこの現象が発生しやすい)。 。
sshd
提案したように-20優先順位で実行してみました。エマルジョンしかし、実際には役に立ちません。デフォルトの優先順位ほど応答しません。
私はいつもRAMにロックされていて、システムの残りの部分がどんなに過負荷になっても使用できる緊急コンソールが欲しいです。 Windows NT≥6のCtrl + Alt + Del画面に似ており、はるかに優れています。一部のRAMがパラメータを使用して予約できることcrashkernel
を考えると、kdump
このメカニズムや他のカーネルメカニズムを活用してタスクを実行できると思いますか?
答え1
ユースケースでは、mlockall
システムコールを使用して特定のプロセスが絶対にスワップされないようにして、スワップスラッシングの速度低下を防ぎます。
earlyoom
このハッキングのカスタムルールをお勧めします。
答え2
スワップパーティションまたは連続スワップファイルが必要です。
スワップ領域は、プログラムが物理メモリをすべて割り当て、より多くのメモリが必要な場合に発生する状況を制御するために使用できます。解放可能キャッシュ(一部のキャッシュブロックが「使用中」で解放できない)がすべて解放されると、システムはOut-Of-Memory状態になります。メモリ不足の状況では、スワッピングによって特定のジョブのメモリがディスクに書き込まれ(スワップアウト)、再利用のために解放され、次のジョブの実行中にメモリに返されます(スワップイン)。交換しないと、システムがハングし、恐ろしいOOM-Killer(カーネルにハードコードされた擬似プロセス)が実行され、メモリを解放するために終了するプロセスを選択します。 OOM-Killerは不便なオプションで有名です。
システムの休止状態には、RAMサイズの連続スワップ領域が必要です。
読むman mkswap fallocate filefrag swapon fstab
。