web-dev-qa-db-ja.com

OOMキラーログでプログラムコマンドライン引数全体を表示する

OOMキラーログで完全なプログラムコマンドライン引数を表示することは可能ですか?/var/log/syslogに表示されるのは

Memory cgroup out of memory: Kill process 29187 (beam.smp) score 998 or sacrifice child
Killed process 29302 (cpu_sup) total-vm:4300kB, anon-rss:76kB, file-rss:272kB
beam.smp invoked oom-killer: gfp_mask=0xd0, order=0, oom_score_adj=0
beam.smp cpuset=/ mems_allowed=0-3

私のマシンにはたくさんのbeam.smpプロセスがあり、OOMkillerによってどの特定のプロセスが強制終了されたかを調べるのはあまり便利ではありません。

8
sergeyz
echo 1 > /proc/sys/vm/oom_dump_tasks

これは、メモリ不足エラーでカーネルに表示させることができる最大値のようです。

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

カーネルがOOM-killingを実行するときに、システム全体のタスクダンプ(カーネルスレッドを除く)を生成できるようにします。これには、pid、uid、tgid、vmサイズ、rss、nr_ptes、swapents、oom_score_adjスコア、名前などの情報が含まれます。これは、OOMキラーが呼び出された理由を特定し、それを引き起こした不正なタスクを特定し、OOMキラーが強制終了するタスクを選択した理由を特定するのに役立ちます。

これをゼロに設定すると、この情報は抑制されます。数千のタスクがある非常に大規模なシステムでは、各タスクのメモリ状態情報をダンプすることが不可能な場合があります。このようなシステムでは、情報が不要な場合にOOM条件でパフォーマンスの低下を強いられるべきではありません。

これがゼロ以外に設定されている場合、この情報は、OOMキラーが実際にメモリを消費するタスクを強制終了するたびに表示されます。

4
HBruijn
echo 1 > /proc/sys/vm/oom_dump_tasks

あまり役に立ちませんでした-ログにコマンドラインパラメータがまだありません。
強制終了されたプロセスのコマンドラインを遡及的に表示するには、 atop を使用してシステムアクティビティを記録できます。
oom-killerがs/thを強制終了した場合は、その時間ログの上を開き、/ var/log/syslogからPIDでプロセスを見つけ、「c」キーを押してプロセスのコマンドラインを表示します。

1
atti