Как добавить swap в Ubuntu 24.04: мало памяти на VPS
Если на VPS с 512 МБ или 1 ГБ RAM падают приложения, swap — первая помощь. Как добавить swap в Ubuntu 24.04, выбрать размер и понять, где swap уже не спасает.
Вы взяли небольшой 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-доступ. Хотите увеличить текущий сервер? Создайте тикет — мы перенесём его на тариф побольше с сохранением данных.
Читайте также
Бот не должен засыпать вместе с ноутбуком. Пошагово: запуск Telegram-бота на Python 24/7 на VPS с Ubuntu 24.04...
Собираетесь запустить сервер Metin2, но не знаете, хватит ли VPS или нужен VDS? Сравниваем общий и выделенный...
Направьте домен на VPS, установите Nginx, опубликуйте сайт и получите бесплатный сертификат Let's Encrypt чере...