OOM Killer — механизм ядра Linux, который при исчерпании доступной памяти принудительно завершает отдельные процессы на сервере для освобождения RAM. Освободившаяся память передается ядру ОС, а после перенаправляется тому процессу, которому ее было недостаточно.
OOM Killer использует определенный набор правил для выбора процесса, который нужно «убить». В целом, в первую очередь будут завершены недавно запущенные пользовательские процессы, которые требуют большого объема памяти и/или имеют множество дочерних процессов; в последнюю очередь будут завершаться системные процессы пользователя root, запущенные значительное время назад.
В связи с тем, что OOM killer «убивает» процессы с помощью SIGKILL
, что не дает возможности корректного завершения процессов, сохранения данных и пр., частое срабатывание этого механизма может приводить к серьезным последствиям в работе системе.
/proc/$PID/oom_adj
, который создается при запуске каждого процесса. Для установки приоритета необходимо узнать PID конкретного процесса, после чего воспользоваться командой:echo -17 > /proc/PID_процесса/oom_adj
Можно использовать название процесса; на примере sshd:
pgrep -f "/usr/sbin/sshd" | while read PID; do echo -17 > /proc/$PID/oom_adj; done
Устанавливаемый приоритет в данном случае — -17. Более безопасный вариант — использовать приоритет -15. В этом случае процесс будет одним из последних, которые OOM killer завершит, но при этом отсутствует полный запрет на завершение, который в критических ситуациях может привести к kernel panic.