Как правильно включить и настроить swap на VDS/VPS с Linux (AlmaLinux, Ubuntu)

Как правило, по умолчанию многие провайдеры VDS/VPS устанавливают Linux на единственный раздел без раздела подкачки (swap). Конечно, это экономит дисковое пространство, однако такой подход оставляет сервер уязвимым перед внезапными скачками потребления памяти. В результате OOM-killer (Out Of Memory killer) может аварийно завершить критически важные процессы, такие как MariaDB, Valkey или воркеры httpd.

В этой инструкции мы не просто «включим swap», а сделаем это с использованием современных методов и оптимизацией ядра для продления жизни SSD/NVMe накопителей.

Важно: Прежде всего, помните, что swap на VDS — это «страховочная сетка» от OOM-killer, а не замена оперативной памяти. Более того, активное использование дискового swap на SSD приводит к преждевременному износу ячеек памяти (TBW). Следовательно, наша главная цель — сделать его доступным на экстренный случай, но при этом максимально минимизировать его использование в штатном режиме.

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

Прежде чем вносить какие-либо изменения, в первую очередь проверьте, не активирован ли swap уже и оцените текущее потребление памяти.

Для начала выполните команду:

free -h

Затем проверьте активные устройства подкачки:

swapon --show

Если команда swapon --show ничего не выводит, значит swap не настроен и мы можем смело переходить к его созданию.

(у меня не оказалось под рукой виртуалки с отсутствующим swap, поэтому такой скрин)


Шаг 2. Создание файла подкачки (современный метод)

Об устаревшей команде dd (устаревшей в данном контексте) лучше забыть, поскольку она медленно создает файл, создавая избыточную и ненужную нагрузку на диск. Вместо этого, в современных файловых системах (например, XFS в AlmaLinux 10 или ext4) настоятельно рекомендуется использовать утилиту fallocate, которая резервирует место практически мгновенно.

Теперь определимся с размером. Для серверов с 2–4 ГБ ОЗУ оптимально создать swap-файл размером 2–4 ГБ. В данном примере мы создадим файл ровно на 4 ГБ:

# Проверяем, не существует ли файл уже, чтобы избежать случайной перезаписи
if [ ! -f /swapfile ]; then
    sudo fallocate -l 4G /swapfile
    echo "Файл /swapfile успешно создан."
else
    echo "Внимание: файл /swapfile уже существует!"
fi

Шаг 3. Настройка прав доступа и форматирование

Обратите внимание, что ядро Linux откажется использовать файл подкачки, если его права доступны для чтения всем пользователям. Это объясняется тем, что это критическая уязвимость безопасности, так как в swap могут попадать фрагменты паролей или приватных ключей.

Поэтому мы должны выставить корректные права, доступные исключительно для пользователя root:

sudo chmod 600 /swapfile

После этого проверяем результат:

ls -lh /swapfile

Ожидаемый вывод должен выглядеть следующим образом: -rw------- 1 root root 4.0G ... /swapfile

Далее мы можем безопасно отформатировать файл в формат подкачки:

sudo mkswap /swapfile

Ожидаемый вывод: Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)


Шаг 4. Активация и добавление в автозагрузку (fstab)

Следующим шагом активируем swap-файл немедленно, причем без необходимости перезагружать сервер:

sudo swapon /swapfile

Вслед за этим проверяем, что система его успешно увидела:

swapon --show

Однако, чтобы swap подключался автоматически после каждой перезагрузки сервера, нам необходимо добавить соответствующую запись в /etc/fstab. Сделаем это максимально безопасно: сначала создадим резервную копию, а затем добавим нужную строку одной командой:

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

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


Шаг 5. Оптимизация ядра: защита SSD и кэша БД (Критически важно!)

По умолчанию Linux стремится активно использовать swap, даже если в системе есть свободная оперативная память. Для современных VDS с SSD/NVMe и базами данных (такими как MariaDB или Valkey) это попросту губительно: в итоге полезный кэш вытесняется на относительно медленный диск, а драгоценный ресурс накопителя тратится абсолютно впустую.

Поэтому мы обязательно настроим два ключевых параметра через sysctl:

  1. vm.swappiness (от 0 до 100). Определяет, насколько агрессивно ядро использует swap. Значение 1 или 10 указывает ядру использовать swap только для предотвращения OOM, максимально сохраняя данные в RAM.
  2. vm.vfs_cache_pressure (по умолчанию 100). Уменьшение до 50 заставляет ядро дольше хранить в памяти кэш файловых систем (inodes, dentries), что ускоряет работу веб-сервера и чтение файлов WordPress.

Сначала применим эти настройки временно (то есть, до ближайшей перезагрузки):

sudo sysctl vm.swappiness=10
sudo sysctl vm.vfs_cache_pressure=50

Затем, для сохранения этих настроек навсегда, мы добавим их непосредственно в /etc/sysctl.conf:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf

Наконец, применяем изменения из файла:

sudo sysctl -p

Альтернатива для маломощных VDS: ZRAM

Если ваш VDS имеет всего 1–2 ГБ оперативной памяти, классический дисковый swap может оказаться слишком медленным. В таком случае, отличной современной альтернативой является технология ZRAM — создание сжатого блочного устройства прямо в оперативной памяти.

ZRAM сжимает данные (алгоритмом zstd или lz4), эффективно увеличивая доступный объем RAM в 1.5–2 раза без какой-либо записи на SSD. В AlmaLinux 10 это реализуется установкой пакета zram-generator. Это предпочтительный выбор для высоконагруженных баз данных на слабых серверах.


Частые ошибки и как их избежать

  1. Ошибка при fallocate на некоторых старых ФС: Если вы получаете ошибку «Operation not supported», используйте классический (но медленный) метод: sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress.
  2. Опечатки в /etc/fstab: Всегда проверяйте файл командой sudo mount -a после редактирования. Если команда не вывела ошибок, синтаксис верен.
  3. Игнорирование мониторинга: После настройки настройте мониторинг (например, через Prometheus + Node Exporter или простой скрипт в cron), чтобы знать, если swap начинает заполняться регулярно. Это сигнал к апгрейду тарифа VDS.

Краткий HowTo

Как включить и настроить swap на VDS с linux

Проверка памяти

Выполните команды free -h и swapon —show для проверки текущего состояния

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

Используйте команду fallocate -l 4G /swapfile для мгновенного создания файла подкачки

Настройка прав и форматирование

Установите права chmod 600 /swapfile и отформатируйте командой mkswap /swapfile

Активация и автозагрузка

Активируйте swap через swapon /swapfile и добавьте запись в /etc/fstab

Оптимизация ядра

Установите vm.swappiness=10 и vm.vfs_cache_pressure=50 в /etc/sysctl.conf для защиты SSD и кэша БД

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *