スワップを強制するときにOOM-killerを実行できますか?

スワップを強制するときにOOM-killerを実行できますか?

システムが非アクティブページを先制的に交換できるようにすることができますが(vm.swappiness)システムのRAMが不足している(メモリ不足の代わりに)強制的に交換する必要がある場合は、oom-killerを呼び出すことはできますか?

究極の目標は、主要なページエラーが原因でディスクが破損し始めた場合にシステムがハングするのを防ぎながら、まだアクティブでないページを交換できるようにすることです。

もう一つの希望は、oom-killerがトリガされる前にシステムが強制的に使用する必要があるスワップメモリ​​の量を設定することです。これにより、システムがあまりにも多くない限り、スワップスペースを少し使用できます。あるいは、すべてのRAMが使用される前にoom-killerをトリガーするしきい値を設定して、常にファイルシステムキャッシュのためのスペースを解放することができます(したがって、より多くのディスクスラッシングを防ぎます)。

そうするのは難しいとは思えません。システムがX RAMを使用/アイドル状態にしたときにoom-killerがトリガされるように指示できるようです。しかし、それが私が尋ねる理由です。

vm.swappiness明確にするためにスワッピングをオフにしたり、パラメータを調整したくありません。

答え1

私もこの問題で苦労しています。とにかく、私はシステムが応答を続けたいと思っており、数分間待つのではなくプロセスを見逃す方が良いです。カーネルOOMキラーを使用してこれを達成する方法はないようです。

しかし、ユーザー空間では、私たちが望むものは何でもできます。だから私は初期OOMデーモン(https://github.com/rfjakob/earlyoom)利用可能なRAMが10%未満に低下すると、最大のプロセスがRSSを介して終了します。

Earlyoomがない場合は、起動してマイコンピュータ(8GB RAM)を簡単にロックできます。http://www.unrealengine.com/html5/何度も。これで問題が解決する前に、[有罪のブラウザ]タブが終了します。

答え2

これは過度に複雑な解決策のように聞こえます。私は(休止状態を必要としないシステムでこれを行います)、少量のスワップスペース(128-256MiB)を割り当てることをお勧めします。このようにカーネルは一部のページを交換できますが、問題が発生する前にOOM-killerが呼び出されます。

本当にこれを行うには、スワップ使用量を監視し、次を使用してOOM-killerを呼び出すスクリプト/プログラムを直接作成する必要があると思います。魔法のSysReqキー(これはプログラムで書くことによって行うことができます/proc/sysrq-trigger)。

関連情報