Кто убил мой сайт? Разбираемся с OOM Killer в Linux
Введение
Иногда владельцы VPS сталкиваются со странной ситуацией:
-
сайт внезапно перестаёт открываться;
-
база данных отключается;
-
панель управления становится недоступна;
-
сервер начинает сильно тормозить;
-
отдельные приложения неожиданно завершаются.
При этом сам VPS продолжает работать и даже отвечает по SSH.
Во многих случаях причиной оказывается OOM Killer (Out Of Memory Killer) - это встроенный механизм ядра Linux, который автоматически завершает процессы при критической нехватке оперативной памяти.
Зачем нужен OOM Killer
Когда системе перестаёт хватать памяти, она оказывается в опасном состоянии.
Если не принять меры:
-
новые процессы не смогут запускаться;
-
приложения начнут зависать;
-
ядро может потерять стабильность;
-
сервер станет полностью недоступен.
Чтобы избежать полного зависания системы, Linux выбирает один или несколько процессов и принудительно завершает их для освобождения памяти. Именно этим занимается OOM Killer.
Проверяем наличие событий OOM
Если сервер не отвечает на запросы SSH, то можно подключится по VNC/IPMI и посмотреть, что происходит на экране. Если сработка была, то на экране будет предупреждение:
Если доступ к SSH есть, но все жутко тормозит, то смотрим логи.
Для современных систем
journalctl -k | grep -i oom
Либо:
journalctl -k | grep -i "killed process"
Пример вывода:
Это сообщение из лога ядра Linux означает, что OOM Killer сработал и принудительно завершил процесс, потому что системе не хватало оперативной памяти:
-
Out of memory - ядро обнаружило критическую нехватку памяти.
-
Killed process 1005 - уничтожен процесс с PID 1005.
-
(stress-ng-vm) - имя процесса. Это стандартный инструмент для стресс-тестирования памяти (часть пакета
stress-ng). Он специально потребляет память, чтобы спровоцировать OOM.
Для старых систем
dmesg | grep -i oom
или
dmesg | grep -i "killed process"


