Gymterview
junior

Что такое swap и как его настроить?

Swap (область подкачки) — область на диске, используемая как расширение оперативной памяти. Когда RAM заполняется, ядро переносит редко используемые страницы памяти на диск, освобождая RAM для активных процессов.

Аналогия из жизни: swap — это ящик стола, куда вы убираете документы, которыми давно не пользовались, чтобы освободить место на рабочей поверхности. Достать их можно, но это медленнее, чем если бы они лежали перед вами.

Зачем нужен swap

  • Предотвращение OOM (Out of Memory) — без swap при нехватке памяти OOM Killer начнёт принудительно завершать процессы
  • Гибернация — содержимое RAM сохраняется на swap
  • Буферизация — ядро может вытеснять неиспользуемые страницы для увеличения дискового кеша

Виды swap

  • Swap-раздел — отдельный раздел диска, выделенный при установке ОС
  • Swap-файл — обычный файл в файловой системе (более гибкий, рекомендуется в Ubuntu 24.04)

Текущее состояние и параметры

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

# Параметр swappiness (0-100, по умолчанию 60)
cat /proc/sys/vm/swappiness

# Изменить swappiness
sudo sysctl vm.swappiness=10                            # Временно
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf  # Постоянно

Рекомендации по размеру swap

Объём RAM Рекомендуемый swap
до 2 ГБ 2x RAM
2-8 ГБ = RAM
8-64 ГБ >= 4 ГБ (или 0.5x RAM)
> 64 ГБ >= 4 ГБ (зависит от задач)

Для Java-разработчика

Если JVM активно использует swap, производительность резко падает. Лучше правильно настроить -Xmx (максимальный размер heap), чем рассчитывать на swap. При swappiness=10 ядро будет использовать swap только в крайних случаях.

На собеседовании: интервьюер хочет услышать, что swap — это не замена RAM, а страховка. Частая ошибка — не упомянуть влияние swap на JVM: если Java-приложение начинает свопить, GC-паузы могут увеличиться в десятки раз, что приводит к таймаутам и каскадным отказам.