GNU/Linux >> Linux の 問題 >  >> Linux

プロセスがOomKiller/ Cgroupsによって強制終了される前に信号を受信しますか?

私たちのクラスターでは、プロセスリソースを制限しています。メモリ(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


Linux
  1. Linux のメモリ不足 (OOM) キラーが自動的に実行されず、sysrq-key で機能するのはなぜですか?

  2. プロセスのピーク時のメモリ使用量

  3. Linux でメモリ使用量はどのように報告されますか?

  1. Linux – Oom Killerはどのプロセスを最初に殺すかをどのように決定しますか?

  2. Linux プロセスのメモリをファイルにダンプする

  3. 十分な(?)空きRAMで物事を殺すOOMキラー

  1. Debian – Oom Killerが正しく機能せず、凍結したOSにつながる?

  2. Linuxのメモリ不足キラー

  3. UNIX / Linux:プロセスにシグナルを送信する 3 つの方法