OOM Killer がプロセスを終了すると、スクリプトがトリガーされます。

OOM Killer がプロセスを終了すると、スクリプトがトリガーされます。

私はクラウドで多くのことを行い、通常はUbuntu 18.04を使用してメモリ集約的な統計モデルを実行します。私にとって最大の問題は、モデルを数時間または一晩実行するように設定しました。いくつかの調査の結果、これはメモリ不足(OOM)キラーによるものです。

何も実行していないクラウドVMを購入するために一晩中時間を無駄にしないように、OOM Killerが私のプロセスの1つをいつ終了するかを知りたいです.

OOMイベントが記録されているようで、/var/log/定期的に.NETで新しいメッセージを検索するcronジョブを作成できると思いました/var/log/。しかし、これはパッチワークのようです。 OOM Killerがプロセスを終了した後に通知を送信するように設定できるシェルスクリプトを実行するように設定する方法はありますか?

答え1

oomでカーネルパニックを作成できます。

sysctl vm.panic_on_oom=1

または今後の再起動のために

echo "vm.panic_on_oom=1" >> /etc/sysctl.conf

プロセスが終了する可能性を調整できますが、これはすでにほとんどが削除されていると仮定しているため、役に立たない可能性があります。を参照してください。man 5 proc/proc/[pid]/oom_score_adj

もちろん、プログラムの終了コードをテストすることもできます。 137の場合、oomができるSIGKILLによって終了します。

使用している場合は、rsyslogdデータストリームのoomメッセージを照合し(どのようなものなのかわかりません)、プログラムを実行できます。

:msg, contains, "oom killer..." ^/bin/myprogram

関連情報