Запуская некоторые серверы Linux с одним или несколькими жизненно важными демонами системной службы, я бы хотел настроить OOM killer для этих демонизированных процессов на случай, если произойдет что-то странное. Например, сегодня некоторые сервера Ubuntu работает MySQL получил убил MySQL демон , потому что тонны apt-checker
процессов были потребить всю память и ядро думали , что это была идея хорошая , чтобы убить MySQL.
Я знаю, что могу настроить счет, используя /proc/$(pidof mysqld)/oom_score_adj
файл, чтобы дать ядру некоторую подсказку, я не предпочитаю, чтобы MySQL был убит, но это не переживает перезапуск службы. Должен ли я отредактировать сценарии init / upstart из пакета, чтобы включить эти настройки? Я не думаю, что это очень элегантное решение, так как я бы внес изменения в файлы, принадлежащие пакету. Можно ли вообще подключиться к сценариям upstart / init и условно настроить их? Или вы бы предложили запустить неопределенный скрипт, как while true{ adjust_oom(); sleep 60;}
?
источник
Ответы:
Несколько современных систем надзора за демонами имеют для этого средства. (Действительно, поскольку для этой работы существует инструмент загрузки цепей, возможно, у всех есть средства для этого.)
oom score
в файле задания.OOMScoreAdjust=
настройку в сервисном блоке. Вы можете использовать файлы исправлений сервисных модулей, чтобы повлиять на предварительно упакованные сервисные модули.oom-kill-protect
инструмент из набора инструментов nosh вrun
программе для сервиса.Если вы конвертируете системный сервисный модуль,
В качестве бонуса вы можете сделать его параметризуемым: и установите значение параметра в среде сервиса (предполагается, что он читается из envdir, связанного с сервисом, здесь манипулируется с помощью набора инструментовconvert-systemd-units
инструмент фактически преобразуетOOMScoreAdjust=
настройку в такой вызовoom-kill-protect
.rcctl
nosh):дальнейшее чтение
oom-kill-protect
, Нош инструментарий. Softwares.oom score
" Выскочка поваренной книги .OOMScoreAdjust
"systemd.exec
, Системные справочные страницы. freedesktop.org.rcctl
, Нош инструментарий. Softwares.источник
Это возможно в Ubuntu с помощью Upstart и
oom score
опции конфигурации.источник
Вы можете взломать его в самом MySQL (например, это
sshd
делает OpenSSH ), но это слишком хардкорно и очень грязно (проблемы с обновлениями и т. Д.)Вы можете сделать это в оболочке или в скрипте инициализации - оценка должна быть унаследована (и в оболочке вы, вероятно, захотите сделать в
exec mysqld "$@"
любом случае).Использование
cgroups
- это даст вам немного больше гибкости и может стать постоянным в том смысле, что соответствующие настройки могут автоматически применяться при перезапуске службы. См., Например, управление приоритетом приложений, использующих cgroups для получения дополнительной информации. Для достижения необходимого вам автоматического подхода вы, возможно, захотите взглянуть на libcgroup , которая содержит демон, который может обрабатывать изменения cgroups запущенного процесса на лету в соответствии с набором правил, или просто использоватьcgexec
оболочку ( из той же упаковки).источник