Как добавить swap на Linux VPS (тарифы с 512 МБ и 1 ГБ ОЗУ)
На облачном сервере с 512 МБ или 1 ГБ ОЗУ база данных, пул PHP-FPM и обновление пакетов легко исчерпывают память одновременно. Тогда OOM killer ядра завершает процесс — чаще всего MySQL или MariaDB. Swap на Linux VPS даёт системе область подкачки на диске, и кратковременные пики потребления памяти больше не роняют службы. В этой инструкции мы создадим файл подкачки в Debian, Ubuntu, CentOS, Rocky Linux и AlmaLinux, сделаем его постоянным и настроим swappiness, а также разберём, когда swap действительно помогает на небольших тарифах.
Шаг 1: Проверьте текущую память и swap
Для начала посмотрите, сколько на сервере ОЗУ и swap, сколько свободного места на диске и завершало ли ядро процессы из-за нехватки памяти.
free -h
swapon --show # no output = no swap yet
df -h / # make sure there is enough free disk space
# Has the kernel already killed processes for lack of memory?
journalctl -k | grep -i -E 'out of memory|killed process'
Если swapon --show уже показывает устройство или файл, возможно, достаточно настроить его (шаг 6), а не добавлять ещё один.
Шаг 2: Выберите размер swap
На VPS swap — это страховочный запас, а не замена ОЗУ. Для типичных небольших тарифов подойдут такие значения:
| ОЗУ тарифа | Рекомендуемый swap | Комментарий |
|---|---|---|
| 512 МБ | 1 ГБ | Настоятельно рекомендуется |
| 1 ГБ | 1-2 ГБ | Рекомендуется для СУБД и панелей управления |
| 2 ГБ | 1 ГБ | Запас на пиковую нагрузку |
| 4 ГБ и больше | 1-2 ГБ или без swap | Только как аварийный резерв |
Файл подкачки занимает место на SSD сервера, поэтому учитывайте свободное место из шага 1.
Шаг 3: Создайте файл подкачки через fallocate или dd
fallocate резервирует место мгновенно. Некоторые файловые системы не поддерживают такой файл для swap — тогда используйте dd, который записывает файл поблочно: дольше, но работает всегда. Файл должен быть доступен только root.
# Fast method (ext4, XFS)
fallocate -l 1G /swapfile
# If fallocate fails, or swapon later reports "file has holes", use dd instead
rm -f /swapfile
dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress
chmod 600 /swapfile
ls -lh /swapfile
swapon может завершиться ошибкой «Operation not permitted».Шаг 4: Отформатируйте и включите swap (mkswap и swapon)
mkswap записывает сигнатуру swap, а swapon сразу её включает — без перезагрузки.
mkswap /swapfile
swapon /swapfile
swapon --show
free -h
Шаг 5: Сделайте swap постоянным через /etc/fstab
Без записи в fstab swap пропадёт после перезагрузки. Сделайте копию файла, добавьте одну строку и проверьте её: выключите swap и снова включите командой swapon -a, которая читает fstab так же, как при загрузке.
cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' >> /etc/fstab
# Test the fstab entry without rebooting
swapoff /swapfile
swapon -a
swapon --show
Шаг 6: Настройте swappiness для VPS
vm.swappiness определяет, насколько охотно ядро переносит страницы памяти в swap. Значение по умолчанию 60 рассчитано на настольные системы. На сервере значение 10 оставляет активные данные в ОЗУ и задействует swap только при реальной нехватке. Уменьшение vfs_cache_pressure дольше сохраняет в кэше метаданные файловой системы.
cat /proc/sys/vm/swappiness # often 60 by default
# Apply now
sysctl vm.swappiness=10
sysctl vm.vfs_cache_pressure=50
# Keep after reboot
cat > /etc/sysctl.d/99-swap.conf <<'EOF'
vm.swappiness=10
vm.vfs_cache_pressure=50
EOF
sysctl --system
Шаг 7: Когда swap помогает на тарифах 512 МБ – 1 ГБ, а когда нет
Swap подходит для кратковременных пиков: apt upgrade или dnf update, компиляция, установка через Composer или npm, ночные резервные копии, временный рост буферов СУБД. Он не решит проблему, если нагрузке постоянно нужно больше памяти, чем есть в тарифе. Проверьте, идёт ли активная подкачка:
# Watch the si (swap in) and so (swap out) columns for 10 seconds
vmstat 1 10
Редкие ненулевые значения в столбцах si и so — норма. Постоянно высокие значения означают «трэшинг», и всё начинает тормозить. В этом случае уменьшите потребление памяти (меньше воркеров PHP-FPM, меньше буферы БД) или добавьте ОЗУ: облачные серверы JUSTG можно расширить по памяти через личный кабинет или тикет.
Шаг 8: Измените размер или удалите файл подкачки
# Resize to 2 GB or remove swap
swapoff /swapfile
rm -f /swapfile
# To remove completely, also delete the fstab line:
sed -i '\|^/swapfile |d' /etc/fstab
# To resize, repeat Step 3 and Step 4 with the new size (fstab line stays)
Частые вопросы
Не изнашивает ли swap SSD?
При swappiness 10 и использовании swap только на пиках объём записи невелик. Постоянная интенсивная подкачка говорит о том, что нужно больше ОЗУ, а не больше swap.
Файл подкачки медленнее раздела подкачки?
На современных ядрах разница пренебрежимо мала. Файл на VPS проще создать, изменить и удалить, поэтому в инструкции используется именно он.
После добавления swap MySQL всё равно завершается. Что делать?
Проверьте journalctl -k | grep -i oom и free -h. Если swap тоже заполнен, уменьшите innodb_buffer_pool_size и число воркеров веб-сервера или увеличьте ОЗУ тарифа.
Если нужна помощь со swap или памятью сервера, создайте тикет по адресу https://www.justg.com/submitticket.php — техническая поддержка JUSTG поможет.