Что произойдет, если в Linux закончится оперативная память (ОЗУ) при включенном SWAP?

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

Ответ

Когда свободная ОЗУ (RAM) заканчивается, ядро Linux активирует механизм подкачки (swapping). Вот что происходит по шагам:

1. Активное использование SWAP:

  • Ядро находит "неактивные" страницы памяти в RAM и перемещает их в специальный раздел или файл на диске — SWAP.
  • Это освобождает RAM для текущих процессов.
  • Главное последствие — резкое падение производительности, так как доступ к диску на порядки медленнее, чем к RAM. Система начинает "тормозить", wa (I/O wait) в top возрастает.

2. Если SWAP тоже заполняется:

  • Ядро запускает OOM Killer (Out-Of-Memory Killer).
  • OOM Killer вычисляет "плохойness score" для каждого процесса (учитывает потребление памяти, приоритет (oom_score_adj), время работы) и принудительно завершает (SIGKILL) процесс с наибольшим score, чтобы освободить память.
  • В системный журнал (/var/log/syslog или journalctl) пишется сообщение вида: Killed process 12345 (java) total-vm:123456kB, anon-rss:87654kB, file-rss:0kB, shmem-rss:0kB

Как это диагностировать:

# Проверить использование памяти и swap
free -h

# Мониторить своппинг в реальном времени (смотреть столбец 'si' - swap in, 'so' - swap out)
vmstat 1

# Проверить, какие процессы используют много памяти
top -o %MEM

Из практики: На production-серверах приложений мы стараемся настраивать мониторинг (например, в Prometheus с Alertmanager), чтобы получать алерты при активном использовании swap (> 10 МБ в секунду), так как это ранний признак проблем с памятью, и принимать меры (оптимизировать приложение, добавить RAM, масштабировать), не дожидаясь срабатывания OOM Killer.