Swap в Linux: что это, размер, swappiness и риски | Глоссарий FREEHOSTING

Swap

Подкачка памяти
Swap — Swap — раздел или файл на диске, куда ядро Linux выгружает редко используемые страницы оперативной памяти, когда ОЗУ заканчивается. Позволяет процессам пережить нехватку RAM, но при активном использовании сильно замедляет систему из-за низкой скорости диска.

Определение простыми словами

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, чтобы система использовала его только в крайнем случае.