Назад | Перейти на главную страницу

Остановить процесс (скрипт) от вызова oom killer

У меня была очень неудачная ситуация, когда сценарий bash, содержащий небольшую ошибку, вышел из-под контроля и забрал всю доступную память, а затем начал убивать другие задачи (производственные приложения!), Чтобы получить еще больше.

Как я могу выполнить вызовы этого и других скриптов с учетом требований будущего, чтобы при достижении предела памяти они падали сами и не убивали другие приложения?

Я бы предпочел что-нибудь, что я мог бы включить в текст сценария.

В Linux https://www.kernel.org/doc/Documentation/sysctl/vm.txt документирует множество настроек для системы виртуальной памяти.

Например, vm.oom_kill_allocating_task=1

Если это значение не равно нулю, убийца OOM просто завершает задачу, которая вызвала состояние нехватки памяти. Это позволяет избежать дорогостоящего сканирования списка задач.

Нет гарантии, что ваши производственные приложения не будут запускать OOM. Но больше шансов ударить по бесконтрольному распределению.

Также есть счет, который вы можете настроить, чтобы взвесить определенные процессы, которые с большей или меньшей вероятностью будут уничтожены для их памяти. / proc / $ PID / oom_adj. Хотя, возможно, вы захотите установить его в своих сценариях инициализации. systemd.exec имеет OOMScoreAdjust.

Вы можете полностью отключить убийцу OOM. Однако при чрезмерной нехватке памяти система может не реагировать или паниковать.

ulimit -m позволит вам установить основной (ну, RSS) предел, применимый к процессу, и ulimit -v позволит вам сделать то же самое с размером виртуальной машины.

Вы можете использовать supervisord для управления процессом. Супервизор может установить квоту памяти.