Как добавить swap на Linux VPS (тарифы с 512 МБ и 1 ГБ ОЗУ)

12 мин чтения 3 просмотров 0
Содержание

На облачном сервере с 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
На Btrfs файлы подкачки требуют особой подготовки (отключение copy-on-write) — используйте специальный способ для этой ФС. При контейнерной виртуализации swap управляется хостом, и 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 поможет.

Помог ли вам данный ответ?

Похожие руководства

root@vps: ~ $ ssh-keygen -t ed25519 -C "laptop-2026"$ ssh-copy-id -i ~/.ssh/id_ed25519.pub root@203…$ ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 … Linux-сервер Вход по SSH-ключу в Linux: настройка ключей ed25519 и отключение входа по паролю Как настроить вход по SSH-ключу ed25519 на Linux VPS, права authorized_keys и безопасно отключить вход по паролю. 14 мин чтения 7 Читать root@vps: ~ $ openssl rand -base64 18$ passwd root$ ss -tlnp | grep ':2222' || echo "port 2222 is… Linux-сервер Как безопасно сменить порт SSH и пароль root на Linux VPS Смена порта SSH и пароля root в Linux: sshd_config, SELinux semanage, UFW/firewalld, ssh.socket в Ubuntu и откат через VNC. 15 мин чтения 6 Читать root@vps: ~ $ ss -tulpn$ sshd -T | grep -i '^port'$ nohup sh -c 'sleep 600; ufw disable' >/dev/nu… Linux-сервер Настройка файрвола в Linux: UFW и firewalld на VPS (IPv4 и IPv6) Настройка файрвола Linux через UFW или firewalld: сначала SSH, веб-порты, доступ по IP, IPv6 и восстановление доступа. 16 мин чтения 7 Читать root@vps: ~ $ df -hT$ df -i$ du -xh --max-depth=1 / 2>/dev/null | sort -h … Linux-сервер Диск заполнен в Linux: как найти и освободить место на VPS Диск Linux заполнен? Ищем, что занимает место (df, du, ncdu), и чистим журнал, кэш apt/dnf, Docker, логи и удалённые файлы. 15 мин чтения 7 Читать