Когда используют SWAP в Linux?

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

Ответ

SWAP используется в Linux как механизм виртуальной памяти, когда физической оперативной памяти (RAM) становится недостаточно для работы системы и приложений.

Основные сценарии использования:

  • Предотвращение Out-of-Memory (OOM) ситуаций: Когда RAM заполняется, ядро перемещает наименее используемые ("холодные") страницы памяти в SWAP-область на диске, освобождая RAM для активных процессов. Это предотвращает аварийное завершение процессов OOM-killer'ом.
  • Реализация гибернации (suspend-to-disk): Для сохранения полного состояния системы на диск при переходе в режим гибернации требуется пространство, равное объёму RAM, которое обычно выделяется в SWAP-разделе.
  • Работа с приложениями, потребляющими большой объём памяти: Даже при достаточном RAM некоторые приложения могут резервировать большие объёмы виртуальной памяти, часть которой может быть вытеснена в SWAP, если не используется активно.

Практические аспекты и настройки:

  • Тип SWAP: Можно создать отдельный раздел (/dev/sdXN) или SWAP-файл внутри файловой системы. Файл проще менять динамически.
  • Настройка агрессивности: Параметр vm.swappiness (от 0 до 100) определяет, насколько активно ядро будет использовать SWAP даже при свободной RAM. На серверах часто устанавливают низкое значение (например, 1 или 10), чтобы минимизировать обращения к диску.
    # Проверить текущее значение swappiness
    cat /proc/sys/vm/swappiness
    # Временно изменить значение (действует до перезагрузки)
    sudo sysctl vm.swappiness=10
  • Мониторинг: Используйте команды free -h или swapon --show для проверки использования SWAP.
  • Производительность и износ: Частая активная подкачка на медленных дисках (HDD) сильно снижает производительность. На SSD частые записи в SWAP могут ускорить износ ячейки памяти. В облачных средах иногда используют локальные SSD-диски для SWAP, чтобы увеличить скорость.

Пример создания SWAP-файла на лету:

# Создаём файл размером 2 ГБ
sudo fallocate -l 2G /swapfile
# Устанавливаем правильные права (чтение/запись только для root)
sudo chmod 600 /swapfile
# Помечаем файл как пространство подкачки
sudo mkswap /swapfile
# Активируем SWAP-файл
sudo swapon /swapfile
# Чтобы активация сохранилась после перезагрузки, добавляем запись в /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab