Ответ
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