Короткий ответ
OOM killer (Out Of Memory killer) — механизм ядра Linux, который принудительно завершает один или несколько процессов, когда в системе заканчивается физическая память и swap, чтобы не допустить полного зависания ядра.
Как это работает подробнее
Когда доступной памяти (включая swap) становится недостаточно для выполнения запроса на выделение, ядро вызывает алгоритм выбора жертвы, который оценивает каждый процесс по значению oom_score (учитывает объём занятой памяти, время работы, настройки oom_score_adj) и завершает процесс с наивысшим счётом сигналом SIGKILL.
Пример кода
commands.sh
dmesg -T | grep -i "killed process"
journalctl -k --since "1 hour ago" | grep -i oomЧто использовать на практике
- Практика. факт срабатывания OOM killer всегда виден в системном журнале (dmesg/journalctl) строкой вида Out of memory: Killed process, и это повод смотреть, какой процесс реально потребляет память и не является ли лимит контейнера/cgroup слишком низким для нормальной работы приложения.
Подводные камни
- Риск. Частая ошибка — считать, что падение процесса с кодом 137 всегда означает баг в самом приложении, не проверив логи ядра на предмет OOM-события — это может быть результатом общей нехватки памяти в системе или слишком жёсткого memory limit контейнера.