Linux OOM-killer 無効化の悩み

Linux OOM-killer 無効化の悩み

スワップのない Linux マシンを持っていますが、設定されていvm.overcommit_memory=2ますvm.overcommit_ratio=100。しかし、これらの設定は効果がないようです。大量のメモリを消費しようとする新しく開始されたプロセスの中には、メモリ割り当てを拒否されるのではなく、依然として OOM で強制終了されるものがあります。これは、以前に開始されたプロセスsysctl -w vm.overcommit_memory=2 vm.overcommit_ratio=100(たとえば、/etc/sysctl.conf起動時に before が適用される) が依然としてオーバーコミットされたメモリにアクセスでき、それによって OOM キラーがトリガーされる可能性があるためでしょうか。(1) カーネルパラメータを使用してメモリのオーバーコミットを無効にすること、または (2) 実行時にカーネルがすべてのプロセスに対してすべてのオーバーコミットされたメモリを割り当てるように強制することは可能ですか?

編集: 関連するDocumentation/Linuxソースコードの一部を閲覧した後 (git c6fa8e6de3)(1)ありそうにない。

答え1

不可能なことを試みています。システムを限界近くまで稼働させると、メモリ不足によりプロセスが強制終了される可能性が常にあります。回避できないシナリオは多数ありますが、最も理解しやすいのは、プロセスがスタックにページを追加することによって発生するページ フォールトです。

oom キルを回避するには、スワップまたは RAM クッションが必要です。

関連情報