Что такое swap в Linux?

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

Ответ

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

Практическое значение для DevOps и администрирования серверов:

  • Буфер против OOM Killer: Без swap система при исчерпании RAM принудительно завершит процесс через OOM Killer (Out-Of-Memory Killer), что может привести к падению критичного приложения. Swap даёт буфер для реакции (добавить RAM, масштабировать, найти утечку).
  • Гибернация: Обязателен для сохранения состояния системы при гибернации.
  • Производительность: Использование swap сильно замедляет работу, так как скорость диска (даже SSD) на порядки ниже RAM. Постоянная активность swap (swapping) — сигнал о нехватке памяти.

Рекомендации по настройке (для серверов):

  • Для физических серверов/VPS: Рекомендуется иметь небольшой swap (1-4 GB) как страховку.
  • Для контейнеризированных сред (Kubernetes): Часто swap отключают на нодах, так как его поведение плохо предсказуемо для планировщика Pod'ов и может маскировать реальные проблемы с лимитами памяти у контейнеров.

Создание и активация swap-файла (на примере Ubuntu):

# 1. Создаем файл размером 2GB
sudo fallocate -l 2G /swapfile

# 2. Устанавливаем правильные права (только root)
sudo chmod 600 /swapfile

# 3. Помечаем файл как пространство подкачки
sudo mkswap /swapfile

# 4. Активируем swap-файл
sudo swapon /swapfile

# 5. Делаем изменение постоянным, добавив запись в /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# Проверяем
sudo swapon --show
free -h

Настройка «агрессивности»: Параметр vm.swappiness (от 0 до 100) определяет, насколько часто ядро будет сбрасывать страницы в swap. Для серверов часто устанавливают низкое значение (например, 10).