Настройка swap в Ubuntu

Пошаговая настройка swap-файла в Ubuntu: проверка текущего состояния, создание swap, подключение через fstab и настройка swappiness.

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

В этой инструкции рассматривается только настройка swap-файла в Ubuntu.

Проверено на: Ubuntu Server 24.04 LTS
Уровень сложности: начальный
Время выполнения: около 10 минут
Требуемый доступ: пользователь с правами sudo

Когда нужен swap

Swap особенно полезен, если:

  • сервер имеет небольшой объём RAM;
  • периодически возникают кратковременные пики потребления памяти;
  • используются приложения, которые могут временно занимать больше памяти;
  • требуется дополнительный запас перед срабатыванием OOM Killer.

Swap не решает проблему постоянной нехватки памяти. Если сервер регулярно использует swap под нагрузкой, стоит увеличить объём RAM или снизить потребление приложений.

Проверка текущего состояния

Проверьте, подключён ли swap:

swapon --show

Проверьте общий объём памяти:

free -h

Проверьте записи в /etc/fstab:

grep -n swap /etc/fstab

Если swapon --show ничего не выводит, swap не подключён.

Выбор размера swap

Универсального значения нет, но для небольших VPS можно ориентироваться на такие значения:

  • 1 ГБ RAM — swap 1–2 ГБ;
  • 2 ГБ RAM — swap 1–2 ГБ;
  • 4 ГБ RAM — swap 1–2 ГБ;
  • 8 ГБ RAM и больше — swap 1–4 ГБ в зависимости от нагрузки.

Для серверов с гибернацией размер swap должен быть не меньше объёма RAM, но на обычных VPS гибернация обычно не используется.

В примере создаётся swap-файл размером 2 ГБ.

Проверка свободного места

Перед созданием swap проверьте доступное место:

df -h /

Убедитесь, что на корневом разделе достаточно свободного пространства.

Создание swap-файла

Создайте файл размером 2 ГБ:

sudo fallocate -l 2G /swapfile

Если fallocate недоступен, используйте dd:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

Ограничьте доступ к файлу:

sudo chmod 600 /swapfile

Проверьте права:

ls -l /swapfile

Ожидаемый результат:

-rw------- 1 root root ... /swapfile

Форматирование swap

Подготовьте файл:

sudo mkswap /swapfile

Подключите swap:

sudo swapon /swapfile

Проверьте:

swapon --show
free -h

Автоматическое подключение после перезагрузки

Добавьте запись в /etc/fstab:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Проверьте, что запись добавлена только один раз:

grep -n '^/swapfile' /etc/fstab

Если строка уже существовала, удалите дубликат.

Проверка fstab

Перед перезагрузкой проверьте конфигурацию:

sudo swapoff /swapfile
sudo swapon -a

Проверьте результат:

swapon --show

Если swap подключился без ошибок, запись в /etc/fstab корректна.

Настройка swappiness

Параметр vm.swappiness определяет, насколько активно ядро использует swap.

Посмотрите текущее значение:

sysctl vm.swappiness

Для серверов часто используют значение 10:

sudo sysctl vm.swappiness=10

Чтобы сохранить настройку после перезагрузки:

sudo tee /etc/sysctl.d/99-swap.conf >/dev/null <<'EOF'
vm.swappiness=10
EOF

Примените параметры:

sudo sysctl --system

Проверьте:

sysctl vm.swappiness

Ожидаемый результат:

vm.swappiness = 10

Настройка vfs_cache_pressure

Параметр vm.vfs_cache_pressure влияет на очистку кеша inode и dentry.

Для серверов можно использовать умеренное значение:

sudo tee -a /etc/sysctl.d/99-swap.conf >/dev/null <<'EOF'
vm.vfs_cache_pressure=50
EOF

Примените настройки:

sudo sysctl --system

Проверьте:

sysctl vm.vfs_cache_pressure

Ожидаемый результат:

vm.vfs_cache_pressure = 50

Изменение размера swap

Чтобы изменить размер существующего swap-файла:

sudo swapoff /swapfile

Удалите старый файл:

sudo rm -f /swapfile

Создайте новый нужного размера:

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Проверьте:

swapon --show
free -h

Запись в /etc/fstab менять не нужно, если путь остался /swapfile.

Отключение swap

Отключите swap:

sudo swapoff /swapfile

Удалите строку из /etc/fstab:

sudo sed -i '\|^/swapfile[[:space:]]|d' /etc/fstab

Удалите файл:

sudo rm -f /swapfile

Проверьте:

swapon --show
free -h

Проверка после перезагрузки

Перезагрузите сервер:

sudo reboot

После входа проверьте:

swapon --show
free -h
sysctl vm.swappiness
sysctl vm.vfs_cache_pressure

Swap должен подключиться автоматически.

Типичные проблемы

Ошибка insecure permissions

Проверьте права:

sudo chmod 600 /swapfile

Swap не подключается после перезагрузки

Проверьте запись:

grep -n '^/swapfile' /etc/fstab

Проверьте вручную:

sudo swapon -a

Файл занят

Перед удалением или изменением размера обязательно отключите swap:

sudo swapoff /swapfile

Не хватает места на диске

Проверьте свободное пространство:

df -h /

Создайте swap меньшего размера или освободите место.

Итог

После выполнения инструкции:

  • создан swap-файл;
  • swap подключён;
  • добавлено автоматическое подключение через /etc/fstab;
  • настроен параметр vm.swappiness;
  • при необходимости настроен vm.vfs_cache_pressure;
  • проверена работа после перезагрузки.

Swap следует рассматривать как резервный механизм, а не как замену достаточному объёму оперативной памяти.

← Предыдущая статья Настройка Fail2ban для защиты SSH в Ubuntu Следующая статья → Установка Docker Engine в Ubuntu