ServerAID
Найти гайд, команду, тег… ⌘ K
Глоссарий  ·  термин

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); там же — общие подходы к работе с диском.
  • systemdswap.target в systemd собирает все активные swap-устройства; интересно при отладке проблем с подкачкой.
  • демон в Linux — почему правильно настроенный swap снижает риск OOM-убийств у демонов под нагрузкой.

Похожие материалы

grep — что это и зачем
Глоссарий

grep — что это и зачем

grep — стандартная команда Linux для поиска строк по шаблону внутри текстовых файлов и потоков. Берёт текст на вход, отдаёт строки, в которых нашлось совпадение. Базовый инструмент работы с логами, конфигами, выводом других команд через пайп.

Редакция
find — что это и зачем
Глоссарий

find — что это и зачем

find — стандартная команда Linux для поиска файлов и каталогов по имени, типу, правам, размеру, дате и десяткам других критериев. С помощью `-exec` поверх найденного можно сразу выполнять команды. Универсальный инструмент админа для массовой работы с файловой системой.

Редакция
snap — что это и зачем
Глоссарий

snap — что это и зачем

snap — система упаковки и установки приложений от Canonical, разработанная как альтернатива apt. Каждый snap — самодостаточный пакет со своими зависимостями, изолированный от системы через AppArmor. Используется на Ubuntu для Firefox, Chromium, microk8s и многих desktop-приложений.

Редакция
LVM — что это и зачем
Глоссарий

LVM — что это и зачем

LVM — слой абстракции между физическими дисками и файловыми системами в Linux. Объединяет диски в пулы (Volume Groups), нарезает их на логические тома (Logical Volumes) и позволяет изменять размер на лету. Альтернатива классическому partitioning, которая делает работу с дисками гибкой.

Редакция