Настройка Swap на Ubuntu и Debian: когда это спасает, а когда убивает производительность
Создаём swap-файл правильно, настраиваем swappiness и разбираемся, почему для СУБД swap — враг, а для маленьких VPS — спасение от OOM Killer.
Swap на VPS с 1–4 ГБ RAM — обязателен (защита от OOM Killer). Создайте swap-файл 1–2 ГБ командами: fallocate, mkswap, swapon. Установите vm.swappiness=10 для серверов с СУБД. Для серверов с 16+ ГБ RAM swap опционален. Никогда не используйте swap как замену RAM — это в 1000× медленнее.
- Swap спасает от OOM Killer на VPS с малым объёмом RAM (1–2 ГБ). Без swap ядро убивает процессы при нехватке памяти.
- Для СУБД (PostgreSQL, MySQL) активный swap — катастрофа. Лучше OOM, чем работа СУБД через swap (latency ×1000).
- Оптимальный swappiness: 10 для серверов с СУБД, 60 (default) для общего назначения, 1 — если swap только как страховка.
- Размер swap: 1–2 ГБ для VPS с 1–4 ГБ RAM. Для серверов с 16+ ГБ RAM swap не обязателен.
Что такое swap и зачем он серверу
Swap — область на диске, которую ядро Linux использует как «запасную» оперативную память. Когда RAM заканчивается, ядро выгружает неактивные страницы памяти в swap, освобождая место для активных процессов.
Без swap при нехватке RAM срабатывает OOM Killer — ядро принудительно убивает процессы, которые потребляют больше всего памяти. Обычно это ваш веб-сервер или СУБД. Результат — даунтайм.
Со swap система продолжит работать, но заметно медленнее. NVMe SSD даёт ~3 ГБ/с чтения, RAM — ~50 ГБ/с. Разница в 15×. На HDD swap практически убивает систему (8 мс latency vs 0.02 мс у NVMe).
Создание swap-файла: пошаговая инструкция
Современный способ — swap-файл (не раздел). Его проще создать, изменить размер и удалить:
# 1. Создаём файл (2 ГБ)
sudo fallocate -l 2G /swapfile
# 2. Права доступа (только root)
sudo chmod 600 /swapfile
# 3. Форматируем как swap
sudo mkswap /swapfile
# 4. Активируем
sudo swapon /swapfile
# 5. Проверяем
swapon --show
free -h
# 6. Автомонтирование при перезагрузке
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 7. Настраиваем swappiness (10 для серверов)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -pswappiness: когда ядро начинает свопить
Параметр vm.swappiness (0–200, по умолчанию 60) определяет, насколько агрессивно ядро использует swap. При 0 — swap используется только когда RAM заполнена на 100%. При 100 — ядро активно свопит даже при свободной RAM.
Для серверов с СУБД: swappiness=10. Мы хотим, чтобы PostgreSQL/MySQL работали из RAM, а swap включался только в аварийной ситуации.
Для маленьких VPS без СУБД: swappiness=60 (default) — нормально. Ядро разумно балансирует между RAM и swap.
swappiness=1: swap используется как абсолютная последняя мера. Подходит для серверов с избытком RAM, где swap нужен только как страховка от OOM.
Проверенные серверы от надежных провайдеров
Timeweb Cloud
Cloud Start
CPU
1 ядер • 3.3 ГГц
RAM
1 ГБ
Диск
15 ГБ NVMe
Канал
200 Мбит/с
299 ₽/мес
Часто задаваемые вопросы (FAQ)
Можно ли использовать swap на NVMe SSD?
Да, NVMe SSD — лучший вариант для swap (низкий latency, высокий IOPS). На HDD swap практически бесполезен из-за высокого latency (8 мс vs 0.02 мс). На SATA SSD — приемлемо.
Сколько swap нужно на VPS с 1 ГБ RAM?
2 ГБ swap — оптимально. Это даст запас от OOM при пиковых нагрузках. Больше 4 ГБ swap при 1 ГБ RAM бессмысленно — если система настолько свопит, нужно увеличивать RAM.