回答:
別のアプローチは、メモリのオーバーコミットを無効にすることです。
健全性のいくつかの類似性をメモリ管理に復元するには:
- OOMキラーを無効にします(
vm.oom-kill = 0
/etc/sysctl.confに入れます)- (入れ無効にメモリオーバーコミット
vm.overcommit_memory = 2
に/etc/sysctl.conf
)これらの設定により、Linuxは従来の方法で動作します(利用可能なメモリよりも多くのメモリを要求するプロセス
これは3値です。malloc()
が失敗し、メモリを要求するプロセスがその失敗に対処することが期待される場合)。
- 0 =「十分なRAMがある場合の見積もり」
- 1 =「常にはい」
- 2 =「記憶がない場合はノーと言う」
これにより、アプリケーションはメモリ不足を処理する必要があり、おそらくそのログ/コアダンプ/などが何か役立つものになるでしょう。
注:システムのメモリが不足すると、新しいプロセスを起動できなくなります。システムからロックアウトされている可能性があります。
echo 1 > /proc/sys/vm/oom_dump_tasks
これは、メモリ不足エラーでカーネルに表示させる最大値のようです。
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
カーネルがOOMキリングを実行するときに、システム全体のタスクダンプ(カーネルスレッドを除く)を生成できるようにし、pid、uid、tgid、vmサイズ、rss、nr_ptes、swapents、oom_score_adjスコア、名前などの情報を含めます。これは、OOMキラーが呼び出された理由を特定し、それを引き起こした不正なタスクを特定し、OOMキラーが殺したタスクを選択した理由を特定するのに役立ちます。
これがゼロに設定されている場合、この情報は抑制されます。何千ものタスクがある非常に大規模なシステムでは、それぞれのメモリ状態情報をダンプするのは現実的ではありません。そのようなシステムは、情報が必要とされない可能性がある場合に、OOM状態でパフォーマンスの低下を強いられるべきではありません。
これがゼロ以外に設定されている場合、この情報は、OOMキラーがメモリを消費するタスクを実際に強制終了するたびに表示されます。