私たちのクラスターでは、プロセスリソースを制限しています。メモリ(memory.limit_in_bytes
。
結局、これもLinuxカーネルのOOMキラーを介して処理されると思います(ソースコードを読むとそのように見えます)。
プロセスが強制終了される前にシグナルを取得する方法はありますか? (-notify
と同じように SGEのqsub
のオプション 、SIGUSR1
を送信します プロセスが強制終了される前に。)
/dev/mem_notify
について読みました ここにありますが、私はそれを持っていません–最近、他に何かありますか?私もこれを読みましたが、これはやや関連性があるようです。
少なくとも小さなスタックトレースとその他の有用なデバッグ情報をダンプできるようにしたいのですが、メモリを解放することで回復できるかもしれません。
現在使用している回避策の1つは、この小さなスクリプトです。このスクリプトは、制限に近づいているかどうか(95%)を頻繁にチェックし、近づいている場合は、プロセスにSIGUSR1
を送信します。 。 Bashでは、このスクリプトをバックグラウンドで開始しています(cgroup-mem-limit-watcher.py &
)同じcgroup内の他のプロシージャを監視し、親のBashプロセスが終了すると自動的に終了するようにします。
承認された回答:
cgroupのメモリ使用量がしきい値を超えたときの通知に登録することができます。原則として、実際の制限よりも低い適切なポイントにしきい値を設定すると、信号を送信したり、他のアクションを実行したりできます。
参照:
https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt