Как победить OOM Killer?

На Linux-системах с небольшим объемом физической оперативной памяти (например, на VPS-ках) часто  можно заметить, что какой-либо процесс внезапно прекращает работу. В чем же дело? Оказывается, он «убит», а виновник — злобный OOM Killer !

OOM Killer представляет собой компонент ядра Linux, защитный механизм, призванный решать проблемы с нехваткой физической памяти (OOM — Out of memory). При обнаружении недостатка памяти OOM Killer «убивает» наименее важный по его мнению процесс, посылая ему сигнал KILL (исключения составляют лишь init и ядерные нити (kernel threads)). Сообщение о об этом появляется в журнале /var/log/syslog в виде:

Out of memory: Kill process **** (****) score **** or sacrifice child
Killed process **** (****)

Но мнение пользователя системы не всегда совпадает с мнением «киллера» 🙂 Как же быть? Как заставить OOM Killer не трогать дорогие нашему сердцу процессы?
На моей VPS-ке жертвой OOM Killer часто становится FTP-сервер ProFTPD. Прекратим это хулиганство! 🙂

Сначала выясним идентификатор (PID) процесса FTP-сервера — proftpd:

Идентификатор оказывается равным 3234.

Затем настроим OOM Killer так, чтобы он даже и не думал убить процесс с PID 3234 — записывает в файл oom_adj в соответствуюшем каталоге (/proc/PID/oom_adj)

магическое число -17 (OOM score):

Проверим заданные настройки:

-17 — всё в порядке! Voi la! Теперь мой FTP-сервер вечно живой 🙂



Как победить OOM Killer?: 2 комментария

  1. nemo

    Спасибо, учтём на будущее.
    Однако, проблема-то не в киллере, а в том, что «кто-то слишком много ест».
    Киллер — это доктор. Добрый доктор с окровавленной пилой, который приходит отрезать ногу, чтобы остальной пациент выжил.
    Насколько я понимаю, очки, по которым доктор-киллер выбирает убиваемого зависят не в последнюю осчередь от объёма занятой процессом памяти. Соотвтественно, если неуязвимый сервер будет жрать её бочками — киллер может убить что-нибудь критически важное для системы и Вы потеряете управление.

    1. foxylab Автор записи

      На моей VPS киллер обычно убивает мои боты или сервисы 🙂 но, к счастью, весьма редко. Убить, например, Apache ему на ум пока не приходило, но это не исключено, конечно. Но, в любом случае, даже если он умудрится потушить доступ по SSH, я могу перезагрузить систему из панели управления VPS-провайдера.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *