Swap на сервере: когда нужен и как включить
Сервер с небольшим объёмом памяти падает не от нагрузки, а от пика: обновление пакетов, бэкап или сборка на минуту забирают всю RAM, и ядро завершает процесс. Swap, он же файл подкачки, даёт запас на диске и время пережить всплеск. Диск в разы медленнее памяти, поэтому постоянная работа в swap означает нехватку RAM. Дальше — как отличить одно от другого и включить swap.
Что swap делает и чего не делает
Swap — область на диске, которую ядро использует как продолжение оперативной памяти. Когда свободной RAM мало, туда уходят давно не нужные страницы: фоновые процессы и кеш. Активные страницы остаются в памяти.
Swap не ускоряет сервер и не заменяет память: он лишь откладывает момент, когда ядро включит OOM killer и завершит процесс. Диск отвечает в разы медленнее RAM, а на VPS к этому добавляется нагрузка соседей по хосту. Небольшой обмен незаметен, постоянный превращает сервер в тормозящую машину.
На VPS swap делают файлом.
Когда swap действительно нужен
Swap имеет смысл в трёх случаях.
- Памяти мало для пиков. Сервер с 1–2 ГБ RAM работает в обычном режиме, но обновление пакетов, сборка или бэкап на минуту требуют больше. Swap помогает пережить пик без падения сервиса.
- Нагрузка неровная. Сайт, бот, панель мониторинга и база на одной машине могут одновременно попросить память, хотя в среднем её хватает.
- Работают контейнеры. Контейнер без лимита займёт всё, что даст хост, и утащит соседей. Swap не заменяет лимиты, но даёт время среагировать.
Если памяти много и пиков нет, swap можно не включать.
Когда swap — признак нехватки памяти
Признак простой: swap занят постоянно, а не только в часы пик. Если free -h показывает растущий Swap used, а vmstat 1 5 выдаёт ненулевые si и so минутами, данные не помещаются в RAM.
Увеличение swap помогает недолго: места больше, но каждое обращение к выгруженным страницам ждёт диск. Ответ — добавить память, ограничить прожорливый сервис или разнести нагрузку.
OOM killer работает и при swap. Когда заканчивается и он, ядро завершает процесс; след остаётся в журнале: journalctl -k | grep -i "killed process".
Сколько swap делать
Ориентиры ниже — отправная точка: размер зависит от пикового потребления.
| Память сервера | Swap | Когда подходит |
|---|---|---|
| 512 МБ — 1 ГБ | 1–2 ГБ | Небольшой сайт, бот, панель |
| 2–4 ГБ | 2–4 ГБ | Сайт с базой или несколько сервисов |
| 4–8 ГБ | 2–4 ГБ | Запас на пики и обновления |
| Больше 8 ГБ | 2–4 ГБ или без swap | Если пиков нет, можно обойтись |
Больше 4 ГБ swap на обычном VPS редко полезны: если система уходит туда целиком, сервер тормозит задолго до заполнения файла. Проверьте место: df -h /.
Правило «swap равен RAM» пришло с домашних компьютеров с гибернацией. Серверу она не нужна: для 1 ГБ RAM хватит 2 ГБ, а 16 ГБ swap при 16 ГБ RAM редко нужны. Как считается память под сайт — в статье про оперативную память.
Как проверить, есть ли уже swap
Три команды:
free -h
swapon --show
cat /proc/swaps
free -h показывает размер и занятое место в строке Swap, но не тип. swapon --show выводит активные области и тип: file или partition; пустой вывод значит, что swap нет.
Проверьте автозагрузку: grep swap /etc/fstab. Без строки swap не поднимется после перезагрузки.
Включение swap-файла на Debian и Ubuntu
Порядок для свежего сервера. Выполняйте команды по одной и читайте вывод.
Шаг 1. Создайте файл
Для 2 ГБ:
sudo fallocate -l 2G /swapfile
fallocate резервирует место сразу и работает не на всех файловых системах. Если он выдал ошибку, создайте файл через dd:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
На btrfs файл должен быть выделен заранее, без copy-on-write и сжатия. Проще держать swap на ext4.
Шаг 2. Закройте файл от посторонних
В swap попадают страницы памяти, поэтому читать его должен только root:
sudo chmod 600 /swapfile
Шаг 3. Разметьте файл как область подкачки
sudo mkswap /swapfile
Шаг 4. Включите swap
sudo swapon /swapfile
Шаг 5. Проверьте результат
swapon --show
free -h
В выводе появится строка с типом file; free -h покажет объём в строке Swap.
Автозагрузка и проверка после перезагрузки
swapon действует до перезагрузки. Чтобы swap поднимался сам, добавьте строку в /etc/fstab, предварительно сделав копию:
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Поля строки: путь, none, swap, опции sw, два нуля. Примените записи:
sudo swapon -a
swapon --show
swapon -a включает всё из fstab, что ещё не активно; молчание команды значит, что строка читается. После перезагрузки повторите swapon --show. Ошибка в fstab может помешать загрузке.
swappiness: когда система уходит в swap
vm.swappiness задаёт, насколько охотно ядро выгружает анонимные страницы. Диапазон — 0–200, по умолчанию 60. Выше — активнее выгружает страницы, ниже — дольше держит их в памяти.
Для файла на VPS начните с 10–20. Проверить и изменить:
cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=10
Временное значение сбросится после перезагрузки; постоянное — в /etc/sysctl.d/90-swap.conf:
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/90-swap.conf
sudo sysctl --system
Для zram логика обратная: swap лежит в памяти, и значение выше 100 не ошибка.
vm.vfs_cache_pressure (по умолчанию 100) управляет кешем имён файлов; понижают до 50–100 на серверах с множеством мелких файлов.
zram: swap в сжатом виде в памяти
zram создаёт в RAM блочное устройство, которое сжимает страницы. Для системы это обычный swap, но данные не уходят на диск. На VPS с малой RAM это быстрый запас без ожидания диска.
В Debian и Ubuntu пакет zram-tools настраивается через /etc/default/zramswap: PERCENT (доля RAM), SIZE (размер в МиБ), ALGO, PRIORITY. Значения по умолчанию отличаются между версиями — откройте свой файл. Установка:
sudo apt install zram-tools
sudo systemctl restart zramswap
swapon --show
В выводе появится /dev/zram0. Сжатие показывает zramctl или sudo zramswap status. zram и файл работают вместе: устройство с большим приоритетом используется первым.
Текст сжимается хорошо, уже сжатые файлы — почти нет; загруженному процессору сжатие добавит работы.
Swap и контейнеры
Контейнер без ограничений использует swap хоста. В Docker --memory ограничивает RAM, --memory-swap — сумму RAM и swap. Если задан только --memory, контейнер может занять ещё столько же в swap; равные значения выключают swap, -1 снимает ограничение.
Внутри контейнера free показывает swap хоста, поэтому проверять надо снаружи. В compose сумму задаёт memswap_limit, в systemd — MemorySwapMax.
Как следить за swap
free -h показывает занятое место, но важнее динамика: vmstat 1 5 печатает si и so — чтение и запись swap. Нули в обычное время — норма, устойчивые ненулевые значения говорят о давлении.
Найти процесс, занявший swap:
sudo grep -H VmSwap /proc/[0-9]*/status | sort -k2 -nr | head
Когда swap и RAM закончились, ядро пишет об убитом процессе в журнал: journalctl -k | grep -i "killed process".
Частые ошибки
- Увеличивать swap, когда система живёт в нём постоянно: места больше, скорость не растёт.
- Забыть fstab: после перезагрузки swap исчезает.
- Создавать файл на заполненном диске: свободного запаса не останется.
- Ставить swappiness в 0: при пике ядро сразу дойдёт до OOM killer.
- Удалять активный файл без
swapoff: сначалаsudo swapoff /swapfile, потом fstab иrm. - Держать swap на медленном сетевом диске: каждый промах будет заметен.
Если свой сервер нужен для подключения устройств
Сервер под устройства требует времени на настройку, обновления и дежурство. Если администрировать машину не хочется, в Siberian V подключение настраивается через приложение: российские сайты идут напрямую, остальное — через зарубежный сервер. Разница разобрана в статье про сервер для роутера.
Частые вопросы
Зачем нужен swap, если памяти хватает?
Небольшой файл страхует от редкого пика: обновлений, сборок, бэкапа. В обычной работе он почти не используется.
Сколько swap делать на 1 ГБ RAM?
Ориентир — 1–2 ГБ. Если сервер регулярно уходит в swap целиком, дело не в размере файла, а в нехватке памяти.
Почему swap не включается после перезагрузки?
Чаще всего нет строки в /etc/fstab или в ней ошибка. Проверьте swapon --show, grep swap /etc/fstab и вывод sudo swapon -a.
Вреден ли swap для SSD?
Сам по себе swap диск не изнашивает: запись идёт только при давлении на память. Постоянная запись — признак нехватки RAM.
Чем zram отличается от swap-файла?
Swap-файл лежит на диске и переживает перезагрузку. zram — сжатый swap в памяти: быстрее, но занимает часть RAM. Их можно использовать вместе, задав zram больший приоритет.