プロセスがOOMキラー/ cgroupによって強制終了される前に信号を受信します


11

このクラスターでは、メモリーなどのプロセスリソースを制限しています(memory.limit_in_bytes)。

結局のところ、これもLinuxカーネルのOOMキラーを介して処理されると思います(ソースコードを読むと、そのように見えます)。

プロセスが終了する前にシグナルを取得する方法はありますか?(SGEの-notifyオプションと同様に、プロセスが強制終了さqsubSIGUSR1れる前に送信されます。)

私は/dev/mem_notify ここについて読みましが、それを持っていません-最近他に何かありますか?私もこれを読んである程度関連性があるようです。

少なくとも小さなスタックトレースと他の有用なデバッグ情報をダンプできるようにしたいのですが、メモリを解放することで回復できるかもしれません。

私が現在使用している回避策の1つは、この小さなスクリプトです。このスクリプトは、上限(95%)に近いかどうかを頻繁にチェックし、上限に近い場合、プロセスにを送信しますSIGUSR1。Bashでは、このスクリプトをバックグラウンド(cgroup-mem-limit-watcher.py &)で開始しているため、同じcgroup内の他のprocを監視し、親Bashプロセスが停止すると自動的に終了します。


私は権限のソースを見つけることができず、特定のプロセスのOOMキラーを手動で呼び出す方法を見つけることもできませんでした(アイデアをテストするため)が、OOMキラーは単にSIGTERMを送信しているようなので、設定する必要がありますこのシグナルのハンドラ。
Hi-Angel

5
@ Hi-Angel:Linuxソースコードから、SIGKILLを送信しているようです。
アルバート

@Albertソースコードを読んだ後、OOM KillerがSIGKILLシグナルを直接送信すると思います。
アンディ2015

回答:



5

OOMキラーは、SIGKILLを送信します。そうしないと、問題のあるプログラムに続行するという選択をさせると逆効果になります。

これは、プロセスがいつ殺されるのかを知る方法がまったくないことを意味します。

このような問題を管理することは、通常、プログラムまたはその構成に修正を加えることを意味します。システムの構成によっては、スワップスペースを増やすだけでOSにメモリ管理の柔軟性を与え、そのような大幅な対策を回避できる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.