Настройка 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 следует рассматривать как резервный механизм, а не как замену достаточному объёму оперативной памяти.