Что такое OOM Killer в Linux?

«Что такое OOM Killer в Linux?» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

OOM Killer (Out-of-Memory Killer) — это механизм ядра Linux, который принудительно завершает процессы в ситуации исчерпания оперативной памяти (OOM), чтобы предотвратить полный крах системы.

Как он выбирает "жертву"? Алгоритм основывается на оценке oom_score для каждого процесса. Чем выше оценка, тем выше вероятность завершения. На неё влияют:

  • Объем потребляемой памяти.
  • Приоритет процесса (oom_score_adj).
  • Время работы процесса.
  • Привилегии пользователя.

Практический пример настройки: Чтобы защитить критически важный процесс (например, базу данных), можно понизить его oom_score.

# Узнаем PID процесса
pgrep postgres
# Защищаем процесс от OOM Killer, установив минимальный корректирующий коэффициент
echo -1000 > /proc/$(pgrep postgres)/oom_score_adj
# Проверяем текущий oom_score
cat /proc/$(pgrep postgres)/oom_score

Мониторинг и диагностика: После инцидента OOM проверьте логи ядра.

# Поиск записей об OOM в логах ядра
dmesg -T | grep -i "killed process"
# Или в системном журнале
journalctl --since "2 hours ago" | grep -i oom

Профилактика в DevOps-контексте:

  1. Настройка политики overcommit: Параметр vm.overcommit_memory (0 – эвристическая, 1 – всегда, 2 – не превышать сумму RAM + swap). Для предсказуемости в продакшене часто используют 2.
  2. Управление памятью в контейнерах: Всегда задавайте лимиты памяти (-m, --memory-reservation) в Docker/Kubernetes, чтобы контейнер не мог исчерпать память хоста.
  3. Адекватный размер swap: Наличие swap-раздела даёт системе буфер и время для реакции, хотя и снижает производительность.
  4. Мониторинг: Используйте Prometheus с Alertmanager для отслеживания использования памяти и прогнозирования OOM.