Как установить настройки убийцы OOM для демонов навсегда?

Запустив некоторые серверы Linux с одним или несколькими жизненно важными системными службами, я хотел бы настроить убийцу OOM для тех демонизированных процессов, если произойдет что-то нечетное. Например, сегодня на каком-то сервере Ubuntu, на котором запущен MySQL, был убит демон MySQL, потому что тонны процессов apt-checker потребляли всю память, и ядро ​​подумало, что было бы неплохо убить MySQL.

Я знаю, что могу настроить счет, используя файл /proc/$(pidof mysqld)/oom_score_adj чтобы дать ядру некоторую подсказку. Я не хочу, чтобы MySQL был убит, но это не /proc/$(pidof mysqld)/oom_score_adj службы. Должен ли я редактировать скрипты init / upstart из пакета, чтобы включить эти настройки? Я не думаю, что это очень элегантное решение, так как я бы вносил корректировки в файлы, принадлежащие к пакету. Можно ли подключиться к сценариям upstart / init вообще и условно настроить его? Или вы предложите запустить неопределенный скрипт, например while true{ adjust_oom(); sleep 60;} while true{ adjust_oom(); sleep 60;} ?

2 Solutions collect form web for “Как установить настройки убийцы OOM для демонов навсегда?”

Это возможно в Ubuntu с использованием Upstart и опции настройки oom score .

oom score

У Linux есть средство «без памяти». […]

Обычно убийца OOM рассматривает все процессы одинаково, эта строфа советует ядру рассматривать эту работу по-разному.

Значение «корректировки», предоставляемое этой строфе, может быть целочисленным значением от -999 (очень маловероятно, чтобы убить убийца OOM) до 1000 (очень вероятно, что он будет убит убийцей OOM). […]

Пример:

 # this application is a "resource hog" oom score 1000 expect daemon respawn exec /usr/bin/leaky-app 

Вы можете взломать его в сам MySQL (например, sshd OpenSSH делает это), но это слишком хардкорно и очень грязно (проблемы с обновлениями и т. Д.),

Вы можете сделать это в оболочке или в скрипте инициализации – оценка должна быть унаследована (и в оболочке вы, вероятно, захотите сделать exec mysqld "$@" любом случае).

Использование cgroups – это даст вам немного большую гибкость, и его можно сделать постоянным в том смысле, что соответствующие настройки могут применяться автоматически при перезапуске службы. См. Например, управление приоритетом приложений с использованием групп для получения дополнительной информации. Чтобы добиться автоматизма, который вы ищете, вы, вероятно, захотите взглянуть на libcgroup , в котором содержится демон, который может обрабатывать изменяющиеся группы запущенного процесса «на лету» в соответствии с набором правил или просто использовать оболочку cgexec (из того же пакета).

  • Как заставить убийцу OOM регистрироваться в / var / log / messages, когда он убивает какой-либо процесс?
  • Как предотвратить использование Apache слишком большого количества ОЗУ
  • Использование памяти неумолимо ползет вверх
  • Процесс Java часто убивается OOM - Killer на обновленном оборудовании
  • Ошибка «Недостаточно памяти» при копировании больших файлов с помощью pcmanfm
  • pmap зависает в процессе OOM
  • Убийца OOM не работает должным образом, приводит к замороженной ОС
  • Почему убийственные процессы убийцы OOM при смене вряд ли используются?
  • Ошибка при перезагрузке Wget из памяти
  • Система не может выделить память, даже если память доступна
  • Использование памяти httpd
  • Linux и Unix - лучшая ОС в мире.