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