TürkiyeVPS

Как добавить swap в Ubuntu 24.04: мало памяти на VPS

Если на VPS с 512 МБ или 1 ГБ RAM падают приложения, swap — первая помощь. Как добавить swap в Ubuntu 24.04, выбрать размер и понять, где swap уже не спасает.

6 мин чтения

Вы взяли небольшой VPS, поставили пару сервисов — и однажды обнаружили, что MySQL или Node.js-приложение просто исчезли. Чаще всего причина прозаична: закончилась оперативная память, и ядро Linux убило процесс, чтобы её освободить. В этой статье разберём, как добавить swap в Ubuntu 24.04, какой размер выбрать, как сделать swap постоянным, когда лучше подходит zram и в какой момент swap уже не поможет. Материал ориентирован на серверы с 512 МБ и 1 ГБ RAM.

Что такое swap и чем он не является

Swap — это место на диске, куда ядро вытесняет редко используемые страницы памяти, когда RAM заполнена. Это может быть файл (swap-файл) или отдельный раздел. На VPS проще всего использовать файл.

Чем полезен swap:

  • При резком росте потребления памяти система замедляется, а не убивает процессы.
  • Память, которая была загружена при старте и почти не используется, уходит на диск и освобождает RAM для реальной работы.
  • Короткие, но прожорливые операции вроде apt upgrade, npm install или composer install перестают обрываться на середине.

Но swap не заменяет оперативную память. Даже быстрый SSD намного медленнее RAM, и сервер, который постоянно свопится, тормозит во всём. Swap — это ремень безопасности, а не второй двигатель.

1. Проверьте текущее состояние

Сначала посмотрим на память и swap:

free -h
swapon --show

Если swapon --show ничего не выводит, swap отсутствует. Если что-то выводит — swap уже есть, оцените его размер, прежде чем добавлять ещё.

Затем проверьте свободное место:

df -h /

На маленьких тарифах это важно. У стартового VPS диск может быть всего 5 ГБ, и swap-файл на 2 ГБ съест заметную его часть. Для таких серверов разумный баланс — от 512 МБ до 1 ГБ swap.

2. Выберите размер swap

Универсальной формулы нет, но для небольших серверов можно ориентироваться на таблицу:

RAM Рекомендуемый swap Комментарий
512 МБ 512 МБ – 1 ГБ При маленьком диске — 512 МБ
1 ГБ 1 ГБ Баланс для большинства небольших проектов
2 ГБ 1 – 2 ГБ Запас на пиковые нагрузки
4 ГБ и больше 1 – 2 ГБ В основном как страховка

Серверы не уходят в гибернацию, поэтому старое правило «swap = 2 × RAM» здесь неактуально.

3. Создайте swap-файл

Пример ниже создаёт swap на 1 ГБ. Для 512 МБ замените 1G на 512M.

sudo fallocate -l 1G /swapfile

На некоторых файловых системах fallocate выдаёт ошибку. Тогда создайте тот же файл через dd (чуть медленнее):

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

Ограничьте права, разметьте файл как swap и включите его:

sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Проверка:

swapon --show
free -h

Если в строке Swap: появился новый объём — всё работает.

Ошибка «Operation not permitted» или «Invalid argument»

Если swapon выдаёт одну из этих ошибок, возможно, слой виртуализации под вашим сервером не разрешает swap-файлы. Удалите файл (sudo rm /swapfile) и напишите нам в онлайн-чат на сайте или создайте тикет в личном кабинете. А пока помогут советы по экономии памяти ниже.

4. Сделайте swap постоянным

Swap, включённый через swapon, пропадает после перезагрузки. Чтобы он сохранялся, добавьте его в /etc/fstab, предварительно сделав резервную копию:

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

Проверьте результат:

tail -n 3 /etc/fstab

Ошибка в fstab может помешать нормальной загрузке, поэтому копия обязательна. Если что-то пошло не так, восстановите файл командой sudo cp /etc/fstab.bak /etc/fstab через веб-терминал в личном кабинете.

5. Настройка swappiness и кеша

Параметр vm.swappiness определяет, насколько охотно ядро использует swap (от 0 до 200, в Ubuntu по умолчанию 60). На сервере лучше задать меньшее значение: приложения останутся в RAM, а swap включится только при реальной нехватке.

cat /proc/sys/vm/swappiness

Постоянная настройка:

sudo tee /etc/sysctl.d/99-swap.conf > /dev/null <<'EOF'
vm.swappiness=10
vm.vfs_cache_pressure=50
EOF
sudo sysctl --system

vm.vfs_cache_pressure=50 дольше держит в памяти кеш метаданных файловой системы (каталоги и inode). Эти значения — разумная отправная точка для небольших серверов; подстраивайте их под свою нагрузку.

Альтернатива: сжатый swap в zram

zram превращает часть оперативной памяти в сжатое swap-устройство. Поскольку оно живёт в RAM, работает гораздо быстрее swap-файла и не занимает место на диске — ценой небольшой нагрузки на процессор. Отличный вариант для маленьких VPS с ограниченным диском.

sudo apt install -y zram-tools
sudo nano /etc/default/zramswap

Задайте значения (по умолчанию алгоритм lz4; zstd чуть сильнее грузит CPU, но сжимает лучше):

ALGO=zstd
PERCENT=50
PRIORITY=100

PERCENT=50 — размер zram в половину RAM (в пересчёте на несжатые данные). PRIORITY=100 — ядро будет использовать zram раньше дискового swap. Перезапустите сервис:

sudo systemctl restart zramswap
swapon --show

Если в списке есть /dev/zram0, zram работает. zram и swap-файл можно использовать вместе: благодаря приоритету сначала заполняется zram. Если модуль zram не загружается, обратитесь в поддержку.

Как удалить swap

sudo swapoff /swapfile
sudo sed -i '\|^/swapfile none swap sw 0 0$|d' /etc/fstab
sudo rm /swapfile

swapoff возвращает данные из swap в RAM, поэтому при нехватке памяти команда может выполняться заметное время.

Как понять, что памяти не хватает (OOM)

Когда память полностью заканчивается, OOM killer ядра завершает один из процессов. Следы ищите в журнале ядра:

sudo journalctl -k | grep -i -E "out of memory|oom"
sudo dmesg -T | grep -i -E "killed process|out of memory"

Кто сейчас ест память, покажут top (затем Shift+M) или ps aux --sort=-%mem | head. Похожие команды собраны в статье команды для управления сервером.

Другие способы сэкономить RAM

  • Лёгкий софт: Nginx вместо Apache, SQLite вместо MySQL там, где его достаточно.
  • Ужмите MySQL/MariaDB: на маленьком сервере держите innodb_buffer_pool_size низким, например 64M–128M.
  • Ограничьте PHP-FPM: pm = ondemand и небольшой pm.max_children не дадут простаивающим воркерам занимать память.
  • Лимиты для Docker: ограничение вроде docker run --memory=256m ... не позволит одному контейнеру повесить весь сервер. Если Docker для вас новый, см. установку Docker на Ubuntu 24.04.
  • Отключите лишние сервисы: список работающих — systemctl list-units --type=service --state=running.

Когда пора добавить RAM, а не swap

Swap нужен, чтобы пережить пики. Если по free -h swap постоянно заполнен, столбцы si и so в vmstat 5 всё время больше нуля или сервер ощутимо тормозит — вам нужна память, а не тонкая настройка swap. Переход на тариф побольше в этот момент гораздо эффективнее. О том, чего честно ждать от бюджетного сервера, мы писали в статье на что смотреть при выборе дешёвого VPS.

Часто задаваемые вопросы

Изнашивает ли swap SSD?

Swap действительно пишет на диск, но при низком swappiness и эпизодическом использовании нагрузка минимальна. Постоянный интенсивный своппинг плох и для производительности — это сигнал добавить RAM.

Что можно запустить на VPS с 512 МБ и swap?

Простого бота, небольшой статический сайт или лёгкий API — вполне. Для базы данных, WordPress или Docker комфортнее начинать с 1–2 ГБ RAM.

zram или swap-файл?

Если диска мало, а процессор в основном простаивает, zram обычно быстрее и удобнее. Хороший вариант — использовать оба, с более высоким приоритетом у zram.

Если памяти нужно больше

Аренда VPS в TürkiyeVPS — это VPS в Турции на серверах в Стамбуле от $0.89 в месяц, есть варианты с 1 и 2 ГБ RAM. Нужны выделенные ядра и гарантированная память — VDS от $1.69 в месяц. На всех тарифах безлимитный трафик и полный root-доступ. Хотите увеличить текущий сервер? Создайте тикет — мы перенесём его на тариф побольше с сохранением данных.