
メモリ不足のメモリダンプを作成する方法。
システムのメモリが不足すると、oom-killer はいくつかの計算で最高のメモリを占めるプロセスを終了します。
終了したプロセスのコアダンプをどのように取得できますか?
答え1
カーネルがコアダンプを生成するように構成されていても、OOM キラーは SIGKILL を送信するため、コアダンプは生成されません。
で述べたように信号マニュアルページ(7)、SIGKILLはコアダンプを生成しません。
したがって、この動作を変更する唯一の方法では、カーネルのカスタムパッチが必要です。
答え2
Configured vm.panic_on_oom=2 in /etc/sysctl.conf, which solves my problem.
**
- パニック
**
メモリ不足パニック機能を有効または無効にします。
0 に設定すると、カーネルは oom_killer といういくつかの悪意のあるプロセスを終了します。通常、oom_killerは悪意のあるプロセスを終了する可能性があり、システムは生き残ります。
この値を 1 に設定すると、メモリ不足が発生したときにカーネルにパニックが発生します。ただし、プロセスがmempolicy / cpusetsを介してノードの使用を制限し、そのノードのメモリが使い果たされると、プロセスはoom-killerによって終了する可能性があります。この状況ではパニックにならない。他のノードのメモリが空になる可能性があるためです。これは、システム全体の状態がまだ致命的ではない可能性があることを意味します。
2に設定すると、上記の状況が発生してもカーネルが強制的にパニックを発生させます。メモリcgroupでoomが発生しても、システム全体がパニック状態になります。
デフォルト値は 0 です。 1 と 2 はクラスターフェイルオーバーに使用されます。フェールオーバー戦略に従って選択してください。 nic_on_oom = 2 + kdumpは、oomが発生した理由を調査するための非常に強力なツールを提供します。スナップショットを取得できます。