swap — что это и зачем
swap — пространство на диске, которое Linux использует как «продолжение» оперативной памяти, когда физической RAM не хватает. Бывает в виде отдельного swap-раздела или файла. На современных серверах с большим количеством RAM swap всё равно нужен — но не для скорости, а для устойчивости.
swap (подкачка)
swap — пространство на диске, которое Linux использует как «продолжение» оперативной памяти, когда физической RAM не хватает. Бывает в виде отдельного swap-раздела или файла. На современных серверах с большим количеством RAM swap всё равно нужен — но не для скорости, а для устойчивости.
Что это в одном абзаце
Когда процессам в системе нужно больше памяти, чем есть физической RAM, ядро Linux может выгрузить редко используемые страницы памяти на диск — в swap. Когда страница снова понадобится, ядро поднимет её обратно. Это медленно (диск в десятки-сотни раз медленнее RAM), но позволяет системе пережить краткосрочные пики потребления без OOM Killer-а.
Посмотреть состояние свопа:
swapon --show # активные swap-устройства
free -h # общий обзор RAM и swap
cat /proc/swaps # подробности
Swap-раздел vs swap-файл
Технически swap может быть:
- Swap-разделом — отдельный раздел диска с типом
linux-swap. Классика; раньше создавался при разметке инсталлятором. - Swap-файлом — обычный файл в файловой системе, помеченный как swap. Гибче: можно увеличить, удалить, перенести без переразметки.
На современной Ubuntu по умолчанию инсталлятор ставит swap-файл (/swap.img), а не отдельный раздел. Это рекомендованный подход — никакой разницы в производительности, зато проще в обслуживании.
Создание swap-файла на 4 ГБ:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Чтобы swap-файл подключался автоматически после ребута, добавьте строку в /etc/fstab:
/swapfile none swap sw 0 0
Если на томе ZFS или btrfs — используйте dd вместо fallocate, иначе ядро может ругаться на разреженный файл.
Сколько swap нужно
Старое правило «swap = 2× RAM» давно неактуально. Современные рекомендации Ubuntu:
| Размер RAM | Рекомендованный swap | Если нужна гибернация |
|---|---|---|
| 2 ГБ или меньше | RAM × 2 | RAM × 3 |
| 2–8 ГБ | равно RAM | RAM × 2 |
| 8–64 ГБ | минимум 4 ГБ | RAM × 1.5 |
| 64+ ГБ | минимум 4 ГБ | гибернация не рекомендована |
Для серверов с большим RAM swap нужен не для расширения памяти, а как «подушка безопасности»: при пике потребления ядро успевает выгрузить редко используемые страницы и спасти важные процессы вместо того, чтобы убивать их через OOM Killer.
Гибернация (suspend-to-disk) — это про десктоп. На сервере её обычно не делают; для них swap = объём, который защищает от единичного процесса-обжоры.
swappiness — насколько активно использовать swap
Параметр vm.swappiness управляет агрессивностью свопа. Диапазон 0–200 (раньше было 0–100), по умолчанию на Ubuntu — 60.
- Близко к 0 — swap используется только при крайней необходимости, ядро предпочитает чистить page-кэш.
- 60 (по умолчанию) — умеренное использование.
- 100 и выше — ядро охотно выгружает в swap даже когда RAM свободна.
На сервере БД (PostgreSQL, MySQL) часто рекомендуют снизить:
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf
Это уменьшит нежелательные паузы, когда страницы БД попадают в swap. На обычных веб-серверах дефолтные 60 нормально.
Текущее значение:
cat /proc/sys/vm/swappiness
zram и zswap — компромисс
Современный паттерн на ноутбуках и в облачных VPS — zram: swap не на диске, а в сжатой области RAM. Получается: вы «жертвуете» часть RAM ради свопа, но он невероятно быстрый (доступ к RAM, не к диску) и часто получается сжатие 2–3×.
sudo apt install -y zram-tools
sudo systemctl enable --now zramswap
zswap — гибрид: сжатый кэш swap-страниц в RAM перед тем, как они попадут на дисковый swap. Включается параметром ядра zswap.enabled=1. На современных Ubuntu zswap-стек обычно достаточен; zram имеет смысл на VPS с малым диском.
Когда swap не нужен
- Виртуальные машины с явным over-commit — если хост агрессивно перепродаёт RAM, гость со swap-ом может уйти в безбожно медленный режим. Иногда лучше совсем без swap, чтобы OOM-Killer гасил процесс быстро.
- Контейнеры — Docker и Kubernetes-под обычно не нуждаются в своём swap, ресурсы лимитируются на уровне cgroup.
- Очень специальные real-time системы — где задержки критичны и любой swap-touch недопустим.
В остальных 95% случаев swap полезен и должен быть.
Частые вопросы
Что такое swap в Linux
Это пространство на диске (раздел или файл), куда ядро выгружает редко используемые страницы памяти, когда RAM не хватает. Позволяет процессам жить дольше при пиковом потреблении и защищает систему от внезапных OOM-убийств.
Чем swap-раздел отличается от swap-файла
Раздел — отдельная физическая область диска с разметкой типа linux-swap. Файл — обычный файл внутри файловой системы, помеченный как swap через mkswap. По производительности разница пренебрежимая. Файл удобнее: можно увеличить, удалить, переместить без правки разметки. На современной Ubuntu по умолчанию используется файл (/swap.img).
Сколько swap нужно для сервера с 16 ГБ RAM
По рекомендации Ubuntu — минимум 4 ГБ swap. Не для расширения RAM, а как «страховка» от единичного процесса, который может временно затребовать 20+ ГБ. Для гибернации (что для серверов редкость) брали бы 1.5× RAM, то есть ~24 ГБ.
Что такое swappiness и какое значение ставить
Параметр vm.swappiness (0–200) — агрессивность использования свопа. По умолчанию 60. Для серверов БД (PostgreSQL, MySQL) обычно снижают до 10 — чтобы страницы БД не уходили в swap и не вызывали лагов. Для обычного веб-сервера дефолт нормально.
Нужен ли swap если у меня много RAM
Да. Даже на серверах с 64+ ГБ RAM swap полезен как «подушка безопасности»: при пике потребления ядро успевает спокойно выгрузить редко используемые страницы вместо того, чтобы внезапно убивать процессы. Размер достаточно небольшой — от 4 ГБ.
Как создать swap-файл на Ubuntu
sudo fallocate -l 4G /swapfile (или dd на btrfs/ZFS), sudo chmod 600 /swapfile, sudo mkswap /swapfile, sudo swapon /swapfile. Чтобы файл подключался после ребута — добавить строку /swapfile none swap sw 0 0 в /etc/fstab.
Что почитать
- btrfs снапшоты и subvolume — на btrfs swap-файл создаётся с особенностями (без
fallocate); там же — общие подходы к работе с диском. - systemd —
swap.targetв systemd собирает все активные swap-устройства; интересно при отладке проблем с подкачкой. - демон в Linux — почему правильно настроенный swap снижает риск OOM-убийств у демонов под нагрузкой.