Что происходит при заполнении памяти (RAM) в Linux?

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

Ответ

Ядро Linux активирует механизмы управления памятью в строгом порядке:

  1. Вытеснение страниц в swap: Если своп-раздел или файл настроен, ядро начинает перемещать наименее используемые страницы памяти (page out) из RAM на диск, чтобы освободить место.
  2. Сжатие памяти (zswap/zram): На многих современных дистрибутивах включен zswap — кэш в RAM, где страницы сжимаются перед записью на диск, что снижает нагрузку на IO.
  3. Убийство процессов (OOM Killer): Если память и swap исчерпаны, ядро запускает Out-Of-Memory Killer. Он вычисляет "плохость" (oom_score) для каждого процесса на основе потребляемой памяти, времени жизни и приоритета (oom_score_adj). Процесс с наибольшим счетчиком принудительно завершается (SIGKILL).

Практические действия и мониторинг:

# Мониторинг памяти и swap
free -h
vmstat 1

# Просмотр текущих oom_score процессов (чем выше, тем вероятнее быть убитым)
cat /proc/<PID>/oom_score

# Настройка защиты критичных процессов (установка отрицательного смещения)
echo -100 > /proc/<PID>/oom_score_adj

# Использование cgroups v2 для жесткого ограничения памяти
# (например, в Docker: --memory="512m", --memory-swap="1g")

В продакшн-среде (особенно для контейнеров) важно настраивать лимиты памяти через cgroups, чтобы предотвратить каскадное завершение процессов OOM Killer'ом.