Swap на VPS: когда нужен и как настроить

Настройка сервера
Swap на VPS: когда нужен и как настроить

Swap в Linux — это страховка от нехватки оперативной памяти: раздел или файл подкачки на диске, куда ядро выгружает редко используемые страницы RAM. Без swap внезапный пик потребления памяти заканчивается визитом OOM-killer — ядро принудительно убивает самый «тяжёлый» процесс, и это почти всегда ваша база данных или веб-сервер. Хостеры на KVM обычно не создают файл подкачки сервера по умолчанию, поэтому настраивать его приходится самому. В этой инструкции разберём, когда swap действительно нужен, какого размера его делать и как создать swap-файл на Ubuntu 24.04 LTS за пять минут — все команды рабочие и проверенные.

Что такое swap и как он работает

Оперативная память сервера делится между процессами и дисковым кешем. Когда свободная RAM заканчивается, у ядра два выхода: сбросить кеш (что замедлит всё, что читает диск) или выгрузить в swap страницы памяти, к которым давно не обращались — например, код демона, запущенного при загрузке и с тех пор спящего.

Важно понимать: swap — не «расширение RAM». Диск даже NVMe медленнее оперативной памяти на порядки, и если сервер начнёт активно гонять страницы туда-обратно (это называется thrashing), отклик просядет катастрофически. Правильная роль swap другая:

  • Буфер против OOM-killer. Кратковременный пик — тяжёлый cron-скрипт, сборка проекта, наплыв посетителей — уходит в swap вместо убийства процессов.
  • Склад для «спящих» страниц. Ядро выгружает неиспользуемое и отдаёт освободившуюся RAM под дисковый кеш — сервер в итоге работает быстрее, а не медленнее.
  • Время на реакцию. Замедление из-за свопинга вы заметите по мониторингу и успеете разобраться; убитый OOM-killer процесс MySQL — это уже простой и возможная потеря данных.

Когда swap на VPS нужен, а когда нет

Swap практически обязателен, если:

  • у сервера 1–4 ГБ RAM — типичные конфигурации недорогих VPS;
  • на одном сервере живут веб-сервер, PHP и база данных одновременно;
  • бывают разовые тяжёлые операции: composer install, сборка фронтенда, импорт дампа БД;
  • вы видели в логах journalctl -k | grep -i "out of memory" следы OOM-killer.

Swap можно не создавать, если у сервера 16+ ГБ RAM с большим запасом под нагрузку, либо приложение само требует его отключения (например, узлы Kubernetes). Сомневаетесь, сколько памяти нужно вашим задачам — загляните в статью сколько оперативной памяти нужно серверу.

Отдельный нюанс — тип виртуализации. Создать свой swap-файл можно только на KVM, где у вас настоящее виртуальное ядро и полный контроль над памятью. На контейнерах OpenVZ/LXC команда swapon обычно возвращает Operation not permitted. Все тарифы Cheap-Host работают на KVM — и московские VPS, и NAT VPS в Германии от 59 ₽/мес, так что инструкция ниже применима к любому из них.

Какой размер swap выбрать

Старое правило «swap = 2 × RAM» родилось во времена серверов с 512 МБ памяти и для современных VPS избыточно. Практичные ориентиры:

RAM сервераРекомендуемый swapКомментарий
1 ГБ1–2 ГБОбязательно: без swap OOM-killer будет частым гостем
2 ГБ1–2 ГБХватает для LEMP-стека и небольших ботов
4 ГБ2 ГБСтраховка от пиков
8 ГБ2–4 ГБВ основном под выгрузку «спящих» страниц
16–32 ГБ2–4 ГБ или без swapПо необходимости, гигантский swap смысла не имеет

Не забывайте про место на диске: swap-файл занимает его целиком сразу. На NAT Base от Cheap-Host (1 vCPU, 2 ГБ RAM, 15 ГБ NVMe за 99 ₽/мес) swap на 2 ГБ — разумный максимум: памяти станет фактически вдвое больше под пики, а под систему и приложения останется ещё около 10 ГБ быстрого NVMe.

Как создать swap-файл на Ubuntu 24.04: пошагово

Шаг 1. Проверяем текущее состояние

swapon --show
free -h

Если первая команда ничего не вывела, а в строке Swap: у free нули — подкачки нет, идём дальше. Если swap уже есть, но маленький, его можно отключить (sudo swapoff /swapfile) и пересоздать большего размера по этой же инструкции.

Шаг 2. Создаём файл

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile

fallocate мгновенно резервирует 2 ГБ на диске. Права 600 обязательны: файл подкачки может содержать фрагменты памяти любых процессов, читать его должен только root — без этого swapon выдаст предупреждение о небезопасных правах.

Если файловая система не поддерживает fallocate для swap, используйте классический вариант — он медленнее, но работает везде:

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

Шаг 3. Размечаем и включаем

sudo mkswap /swapfile
sudo swapon /swapfile

Проверяем:

free -h
swapon --show

В выводе должна появиться строка вида /swapfile file 2G 0B -2. Swap уже работает.

Шаг 4. Включаем автоподключение после перезагрузки

Пока что swap пропадёт при ребуте. Добавляем запись в /etc/fstab:

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

Убедиться, что строка не задублировалась и написана без опечаток, можно так: cat /etc/fstab. Ошибка в fstab способна помешать загрузке, поэтому проверка лишней не будет.

Шаг 5. Настраиваем swappiness

Параметр vm.swappiness (0–200 в современных ядрах, по умолчанию 60) определяет, насколько охотно ядро выгружает страницы в swap вместо сброса дискового кеша. Для сервера значение 60 великовато — система начнёт свопить раньше, чем нужно. Оптимум для VPS — 10:

echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf
sudo sysctl -p /etc/sysctl.d/99-swap.conf

Проверка текущего значения: cat /proc/sys/vm/swappiness. С таким значением swap используется как страховка, а не как замена RAM: ядро полезет в него только при реальном дефиците памяти.

Альтернатива и дополнение: zram

Zram создаёт swap-устройство прямо в оперативной памяти со сжатием на лету: страницы ужимаются примерно в 2–3 раза, и «лишняя» память появляется без обращения к диску. Это быстрее файла подкачки и особенно полезно на конфигурациях с 1–2 ГБ RAM. В Ubuntu 24.04 ставится одной командой:

sudo apt update
sudo apt install zram-tools

Настройки лежат в /etc/default/zramswap — например, можно задать процент RAM под zram (PERCENT=50) и алгоритм сжатия (ALGO=zstd). После правки перезапустите службу:

sudo systemctl restart zramswap.service
swapon --show

Zram и обычный swap-файл отлично работают вместе: ядро сначала использует быстрый zram (у него выше приоритет), а на диск уходит только то, что не поместилось. Такая связка на NAT Base за 99 ₽/мес позволяет спокойно держать Telegram-бота, пару скриптов и лёгкую базу там, где «голые» 2 ГБ уже упирались бы в потолок.

Как понять, что swap используется правильно

Разовое заполнение swap — норма. Плохой признак — постоянный активный обмен. Смотрим:

vmstat 5

Колонки si (swap in) и so (swap out) должны почти всегда быть нулевыми. Если там стабильно ненулевые значения — серверу не хватает RAM, и никакая настройка подкачки это не исправит: пора либо оптимизировать приложения, либо взять тариф побольше. У Cheap-Host апгрейд CPU, RAM и диска делается без потери данных, так что переезд на соседний тариф — вопрос пары минут, а не миграции.

Топ процессов по потреблению памяти удобно смотреть в htop (сортировка по колонке MEM%) — подробнее об этом в статье мониторинг VPS своими руками. И раз уж вы настраиваете новый сервер, сверьтесь с общим чек-листом первых шагов после покупки VPS: swap там — лишь один из десяти пунктов.

Как удалить или изменить swap-файл

Если понадобилось убрать swap или пересоздать его другого размера:

  1. Отключаем: sudo swapoff /swapfile (ядро перенесёт данные обратно в RAM — при занятом swap это займёт время).
  2. Удаляем файл: sudo rm /swapfile.
  3. Убираем строку /swapfile none swap sw 0 0 из /etc/fstab любым редактором.

Для увеличения размера после swapoff просто повторите шаги 2–4 инструкции с новым значением в fallocate — правка fstab при том же пути файла не потребуется.

FAQ

Swap изнашивает NVMe-диск?

При swappiness 10 и достаточном объёме RAM запись в swap идёт эпизодически — единицы гигабайт в месяц, что на порядки меньше ресурса записи NVMe-накопителя. Проблема возникает только при постоянном свопинге, но это сигнал не отключать swap, а добавить памяти серверу.

Можно ли создать swap на любом VPS?

На VPS с KVM-виртуализацией — да: вы полностью управляете ядром и памятью, swap-файл создаётся штатными командами. На контейнерной виртуализации (OpenVZ, LXC) swap часто запрещён на уровне хост-системы, и команда swapon вернёт ошибку Operation not permitted.

Что лучше: swap-файл или swap-раздел?

На современных ядрах разницы в производительности нет. Swap-файл удобнее: его можно создать, увеличить или удалить без переразбивки диска. Отдельный раздел имеет смысл, только если он уже существует после установки ОС.

Почему swap занят, хотя свободная RAM есть?

Ядро не спешит возвращать страницы из swap: если данные лежат там и к ним не обращаются, переносить их обратно нет смысла. Занятый swap при свободной RAM — след прошедшего пика, а не текущая проблема. Тревожный признак — активный обмен: растущие si/so в выводе vmstat.

Нужен ли swap, если RAM 16–32 ГБ?

Небольшой swap на 2–4 ГБ полезен и здесь: ядро выгрузит неиспользуемые страницы и отдаст память под дисковый кеш. Исключение — базы данных с точной ручной настройкой памяти и кластеры Kubernetes, где swap традиционно отключают.

Вывод

Swap на VPS — дешёвая страховка, которая настраивается за пять минут: fallocate, mkswap, swapon, строка в fstab и swappiness=10. Для машин с 1–2 ГБ RAM добавьте zram — и сервер переживёт пики нагрузки, которые без подкачки закончились бы убитыми процессами. Если для экспериментов или лёгких задач нужен недорогой сервер — у Cheap-Host есть NAT Base за 99 ₽/мес: KVM (свой swap создаётся без ограничений), 2 ГБ RAM, 15 ГБ NVMe, безлимитный трафик и выдача сервера за минуту.

Читайте также