В нашем кластере мы ограничиваем ресурсы наших процессов, например, память ( memory.limit_in_bytes
).
Я думаю, в конце концов, это также обрабатывается через OOM killer в ядре Linux (похоже, читая исходный код ).
Есть ли способ получить сигнал до того, как мой процесс будет убит? (Точно так же, как -notify
опция для SGEqsub
, которая будет отправлена SIGUSR1
до завершения процесса.)
Я читал /dev/mem_notify
здесь, но у меня его нет - есть ли что-то еще в наши дни? Я также прочитал это, которое кажется несколько уместным.
Я хочу иметь возможность по крайней мере вывести небольшую трассировку стека и, возможно, другую полезную информацию отладки, но, возможно, я смогу даже восстановить ее, освободив часть памяти.
В настоящее время я использую один из обходных путей - это небольшой скрипт, который часто проверяет, близок ли я (95%) к пределу, и если да, отправляет процесс a SIGUSR1
. В Bash я запускаю этот скрипт в background ( cgroup-mem-limit-watcher.py &
), чтобы он следил за другими процессами в той же группе и автоматически завершал работу, когда родительский процесс Bash умирал.