Swap-файл в Linux: как добавить и настроить на VPS
Swap-файл — это область на диске которую Linux использует как дополнительную оперативную память когда физическая RAM заканчивается. Создаётся за 5 команд и не требует перераздела диска. На VPS с 1-2 ГБ RAM swap защищает от OOM Killer — ситуации когда ядро принудительно завершает процессы из-за нехватки памяти.
Зачем нужен swap в Linux
Когда все процессы суммарно потребляют больше RAM чем физически есть, ядро Linux должно что-то сделать. Без swap оно запускает OOM Killer (Out Of Memory Killer) — механизм который принудительно убивает процессы, обычно самый «дорогой» по памяти. Это может быть ваше приложение, база данных или даже SSH-демон.
Swap даёт ядру альтернативу: вместо убийства процесса оно перемещает редко используемые страницы памяти на диск. Это медленнее RAM, но приложения продолжают работать.
Важно понимать: swap не делает VPS быстрее. Это аварийный буфер, а не замена RAM. Если система постоянно использует swap — нужно увеличивать RAM, а не размер swap.
Сколько swap нужно
| RAM на VPS | Рекомендуемый размер swap |
|---|---|
| 512 МБ | 1-2 ГБ |
| 1 ГБ | 1-2 ГБ |
| 2 ГБ | 2 ГБ |
| 4-8 ГБ | 2-4 ГБ |
| Больше 8 ГБ | 4 ГБ или не нужен |
На современных VPS с NVMe-дисками swap работает заметно быстрее чем на HDD, но всё равно значительно медленнее RAM — в 10-100 раз в зависимости от нагрузки. Не создавайте swap больше чем нужно: большой swap маскирует реальную проблему нехватки памяти.
Проверка текущего состояния
Посмотреть есть ли swap и сколько используется:
swapon --show
Если вывод пустой — swap не настроен. Общий обзор памяти:
free -h
Создание swap-файла в Linux
Шаг 1: Создать файл нужного размера
Есть два способа. Первый — быстрый через fallocate:
sudo fallocate -l 2G /swapfile
Этот способ мгновенный, но не работает на файловых системах btrfs и некоторых конфигурациях xfs. Если получили ошибку fallocate failed: Operation not supported — используйте второй способ через dd:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
Здесь count=2048 создаёт файл 2048 МБ (2 ГБ). Для других размеров: 1 ГБ = 1024, 4 ГБ = 4096. Команда dd работает на любой файловой системе, но записывает данные посекторно — на NVMe занимает несколько секунд, на HDD дольше.
Проверить что файл создан:
ls -lh /swapfile
Шаг 2: Установить права доступа
Это обязательный шаг — без него mkswap выдаст предупреждение, а swapon откажется активировать файл:
sudo chmod 600 /swapfile
Права 600 означают что только root может читать и изменять файл. Если оставить открытые права — любой пользователь системы теоретически может читать содержимое swap, а там могут оказаться фрагменты чувствительных данных.
Шаг 3: Отформатировать файл как swap
sudo mkswap /swapfile
Шаг 4: Активировать swap
sudo swapon /swapfile
Проверить что swap активирован:
swapon --show
Должна появиться строка с /swapfile и указанным размером. Также проверяется через:
free -h
В строке Swap теперь будет ненулевое значение в столбце total.
Шаг 5: Сделать постоянным после перезагрузки
Без этого шага swap исчезнет после перезагрузки сервера. Добавьте запись в /etc/fstab:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Проверьте что запись добавилась корректно:
cat /etc/fstab | grep swap
Протестируйте запись без перезагрузки:
sudo swapoff -a && sudo swapon -a
Команда отключает и включает все swap-области из fstab. Если ошибок нет — всё настроено верно.
Настройка swappiness
Параметр vm.swappiness управляет тем, насколько охотно ядро перемещает данные из RAM в swap. Значение от 0 до 100.
Посмотреть текущее значение:
cat /proc/sys/vm/swappiness
По умолчанию — 60. Это значит что ядро начинает использовать swap уже при 40% свободной RAM. Для VPS это слишком агрессивно: disk I/O дорог, лишние обращения к swap замедляют работу.
Рекомендуемое значение для VPS: 10. Ядро будет уходить в swap только когда свободной RAM становится совсем мало.
Изменить значение немедленно (без перезагрузки):
sudo sysctl vm.swappiness=10
Чтобы значение сохранялось после перезагрузки:
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf
Важно: значение swappiness=0 в современных ядрах Linux (начиная с версии 3.5) не означает «полностью отключить swap». Оно означает «не использовать swap пока есть хоть немного свободной памяти». Если хотите минимальное использование — ставьте 1, не 0.
Дополнительно: vfs_cache_pressure
Параллельно со swappiness стоит настроить vfs_cache_pressure — параметр управляет тем насколько агрессивно ядро вытесняет кеш файловой системы (метаданные директорий и файлов).
По умолчанию значение 100 — ядро одинаково охотно вытесняет и кеш ФС и данные приложений. Значение 50 означает что ядро будет дольше держать кеш в памяти прежде чем сбрасывать в swap:
sudo sysctl vm.vfs_cache_pressure=50
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-swap.conf
Практический эффект: файловые операции остаются быстрее при нагрузке, потому что директории и inode чаще находятся в кеше.
Мониторинг swap
Смотреть использование swap в реальном времени:
watch -n 2 free -h
Обновляет вывод каждые 2 секунды. Нажмите Ctrl+C чтобы выйти.
Если swap используется — найти какие процессы его заняли:
for f in /proc/*/status; do awk '/VmSwap|Name/{printf $2" "$3}END{print ""}' $f; done | sort -k2 -n -r | head -10
Команда показывает топ-10 процессов по использованию swap. Если один процесс занимает значительную часть — возможно именно он стал причиной нехватки памяти.
Удаление swap
Если swap больше не нужен или хотите изменить размер:
Отключить swap:
sudo swapoff /swapfile
Удалить файл:
sudo rm /swapfile
Убрать строку из /etc/fstab:
sudo sed -i '/swapfile/d' /etc/fstab
Для создания swap другого размера — повторите весь процесс создания с нуля.
Часто задаваемые вопросы
Замедляет ли swap-файл работу VPS?
Использование swap само по себе означает что системе не хватает RAM, поэтому производительность уже снижена. Swap на NVMe работает значительно быстрее чем на HDD, но всё равно медленнее RAM в 10-100 раз. Swap предотвращает падение приложений, но не заменяет добавление реальной памяти.
Почему swappiness=0 не отключает swap?
В ядре Linux начиная с версии 3.5 значение 0 не означает «никогда не использовать swap». Оно означает «не использовать swap пока есть хоть немного свободной RAM». При нулевом остатке памяти ядро всё равно начнёт использовать swap. Чтобы полностью отключить swap — выполните sudo swapoff -a, но без swap при нехватке памяти OOM Killer будет убивать процессы.
Нужен ли swap если у VPS 4 ГБ RAM и больше?
Зависит от задач. При 4+ ГБ RAM большинство стандартных веб-приложений не упираются в память. Но если запускаете базу данных, Java-приложение или несколько сервисов одновременно — небольшой swap (2 ГБ) как аварийный буфер всё равно полезен. Следите через free -h: если RAM используется меньше чем на 80% в пике — swap не нужен.
Можно ли создать несколько swap-файлов?
Да. Linux поддерживает несколько swap-областей одновременно. Каждую нужно создать, отформатировать и добавить в fstab отдельно. Но обычно это излишне: проще создать один файл нужного размера.
Как понять что swap исчерпан и нужно больше RAM?
Признаки: swap заполнен более чем на 80% постоянно, приложения работают медленно, в логах появляются сообщения об OOM. Проверьте командой free -h в разное время суток. Если swap постоянно занят — нужен апгрейд RAM, увеличение swap только отложит проблему.
На UFO.Hosting каждый VPS работает на NVMe-дисках — swap на таких серверах значительно быстрее чем на HDD-хостингах. Если swap постоянно заполнен, рассмотрите апгрейд тарифа с большим объёмом RAM в личном кабинете.
Похожее
Все статьи
Cron в Linux: автоматизация задач — полное руководство
Cron — планировщик задач в Linux, который запускает команды и скрипты по расписанию. Чтобы добавить задачу, достаточно одной строки в специальном файле — crontab. После сохранения cron подхватывает изменения автоматически и больше не требует вашего участия. Как работает cron Демон…
Nginx: установка и настройка на Ubuntu 22.04 и 24.04
Nginx устанавливается на Ubuntu одной командой и начинает работать сразу после этого. Весь процесс — от чистого сервера до работающего сайта — занимает около десяти минут. Ниже разберём установку, настройку файрвола, создание виртуального хоста и основные команды для повседневной работы.…