Определение простыми словами
Swap — это «запасной карман» для оперативки. Когда RAM переполняется, ядро берёт страницы памяти, которые давно никто не трогал, и пишет их на диск. Освободившееся место отдаёт активным процессам. Если страница снова понадобится — её прочитают обратно, но в десятки тысяч раз медленнее.
На сервере swap нужен как страховка от OOM-killer: лучше потерять секунду на подкачке, чем убитый процесс. На SSD и NVMe работа со swap быстрее, но всё равно проигрывает RAM в 100–1000 раз. Размер задают через swappiness — чем выше, тем агрессивнее ядро вытесняет страницы.
Сравнение
| Тип | Скорость | Гибкость | Когда брать |
|---|---|---|---|
| Swap-раздел | Чуть быстрее файла | Размер фиксируется при разметке | Bare-metal сервер |
| Swap-файл | На 1–3% медленнее | Меняется на лету | VPS, контейнеры |
| zswap (сжатие в RAM) | Быстрее обоих | Прозрачный кеш перед swap | Системы с малым ОЗУ |
| zram (RAM как swap) | Сравнима с RAM | Не пишет на диск вообще | Embedded, контейнеры |
Кейсы использования
- VPS с 1 ГБ RAM под WordPress — 1 ГБ swap-файла спасает PHP-FPM от OOM при всплеске трафика.
- База данных — на сервере с СУБД swap делают минимум (1–2 ГБ) и снижают swappiness до 10, чтобы InnoDB не уехал на диск.
- Сборка Chromium или больших Docker-образов — временный 8 ГБ swap-файл выручает на VPS с 4 ГБ RAM.
- Контейнеры — внутри Docker swap по умолчанию ограничен, нужно явно включать в LimitMEMSWAP.
- Негативный сценарий: дать 16 ГБ swap на сервер с 32 ГБ RAM и swappiness 60 — БД начнёт уезжать в подкачку, латентность запросов вырастет в 50 раз. Лечение — vm.swappiness=10 и мониторинг si/so в `vmstat`.
Технические детали
# Создание swap-файла 2 ГБ
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# Постоянное подключение через /etc/fstab
echo '/swapfile none swap sw 0 0' >> /etc/fstab
# Текущий статус
free -h
swapon --show
# Снижение агрессивности подкачки (для серверов с БД)
sysctl -w vm.swappiness=10
echo 'vm.swappiness=10' >> /etc/sysctl.conf
# Мониторинг si (swap in) и so (swap out)
vmstat 2 5
# si so
# 0 0 <- swap не используется, ок
# 100 200 <- активная подкачка, серверу плохо
# Отключение swap
swapoff /swapfile && rm /swapfile
🔥 Где это применяется
Частые вопросы
Сколько swap делать на сервере?
Общее правило: при RAM до 2 ГБ — swap равен ОЗУ, при 4–8 ГБ — половина, при 16 ГБ и больше — 2–4 ГБ как страховка. Под СУБД меньше, под десктоп с гибернацией — равно RAM.
Замедляет ли swap систему?
Сам по себе нет. Замедляет активная подкачка: si/so в vmstat больше нуля = диск стал бутылочным горлом. RAM в 100–1000 раз быстрее даже NVMe.
Нужен ли swap на сервере с 64 ГБ RAM?
Да, маленький (2–4 ГБ) — ядру удобнее выгружать совсем неактивные страницы. Но swappiness снижают до 1–10, чтобы система использовала его только в крайнем случае.