Подробный гайд по настройке размера swap в Linux
Что такое swap и зачем менять его размер?
Swap (пространство подкачки) — это резервная область на диске, куда ядро перемещает страницы памяти, когда физической ОЗУ не хватает. Современные практики рекомендуют использовать swap-файл вместо отдельного раздела: его проще создавать, изменять, перемещать и удалять без переразметки диска.
Важно:
- Swap не заменяет ОЗУ. Если система постоянно активно подкачивает данные, это сигнал о нехватке оперативной памяти. Увеличение swap в таком случае лишь скроет проблему и снизит производительность.
Как выбрать оптимальный размер?
| Объём ОЗУ | Рекомендуемый swap | С гибернацией (suspend-to-disk) |
|---|---|---|
| ≤ 2 ГБ | ×2 от ОЗУ | ОЗУ + 20% |
| 2–8 ГБ | ×1 от ОЗУ | ОЗУ + 2 ГБ |
| 8–32 ГБ | 4–8 ГБ | ОЗУ + 4 ГБ |
| 32–64 ГБ | 4–8 ГБ | Обычно не требуется |
| > 64 ГБ | 2–4 ГБ (или 0) | Только если явно нужна |
Дополнительные рекомендации:
- Для серверов без гибернации часто достаточно 2–4 ГБ, даже при 32+ ГБ ОЗУ.
- На десктопах с
systemd-oomdилиzramтрадиционный swap может быть не нужен вовсе. - Если планируете использовать гибернацию, размер swap должен быть ≥ объёма ОЗУ.
Шаг 1. Проверка текущего состояния
# Общий объём памяти и swap
free -h
# Активные swap-устройства
swapon --show
# Подробная информация
cat /proc/swaps
Шаг 2. Создание swap-файла
Рекомендуемый путь: /swapfile
2.1. Создаём файл нужного размера
# Пример: 4 ГБ
sudo fallocate -l 4G /swapfile
Если fallocate выдаёт ошибку (некоторые ФС, например старые версии XFS или NFS), используйте dd:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
2.2. Устанавливаем безопасные права
Только root должен иметь доступ к файлу подкачки:
sudo chmod 600 /swapfile
2.3. Инициализируем как swap
sudo mkswap /swapfile
Для Btrfs: перед mkswap обязательно отключите Copy-on-Write для файла, иначе подкачка не заработает:
sudo chattr +C /swapfile
2.4. Активируем
sudo swapon /swapfile
2.5. Проверяем
swapon --show
free -h
Шаг 3. Автоматическое монтирование (персистентность)
Добавьте запись в /etc/fstab, чтобы swap поднимался при загрузке:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Проверьте синтаксис перед перезагрузкой: sudo findmnt --verify
Шаг 4. Тонкая настройка поведения подкачки
4.1. vm.swappiness (0–100)
Определяет, насколько агрессивно ядро будет использовать swap.
0– минимальная подкачка (только при критической нехватке ОЗУ)10–30– серверы, БД, высоконагруженные приложения60– значение по умолчанию в большинстве дистрибутивов80–100– десктопы с малым объёмом ОЗУ
Применить сразу:
sudo sysctl vm.swappiness=10
Сохранить навсегда:
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf
4.2. vfs_cache_pressure (по умолчанию 100)
Управляет тем, как быстро ядро сбрасывает кэш файловой системы.
На серверах с активным I/O полезно снизить до 50–70:
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-cache.conf
sudo sysctl -p
Как изменить размер существующего swap-файла?
1. Отключите текущий файл:
sudo swapoff /swapfile
2. Удалите или измените размер:
sudo rm /swapfile
# или создайте новый другого размера (см. Шаг 2)
- Повторите шаги инициализации и активации.
/etc/fstabменять не нужно, если путь остался прежним.
Как полностью удалить swap
sudo swapoff /swapfile
sudo rm /swapfile
# Удалите строку с /swapfile из /etc/fstab вручную или:
sudo sed -i '/\/swapfile/d' /etc/fstab
Мониторинг и диагностика
# Статистика использования в реальном времени (обновление каждые 2 сек)
vmstat 2
# Топ-процессы по использованию памяти и swap
htop # или top (нажмите M для сортировки по памяти)
# История подкачки (требуется пакет sysstat)
sar -S 1 5
# Ошибки ядра, связанные с подкачкой
dmesg | grep -iE 'swap|oom'
Современные альтернативы и нюансы
| Технология | Когда использовать | Примечание |
|---|---|---|
zram |
Десктопы, IoT, ограниченные устройства | Сжатая подкачка в ОЗУ. Быстрее диска, экономит место. systemd-zram-generator поддерживает в Ubuntu 24.04+/Fedora 40+ |
systemd-oomd |
Серверы с контейнерами | Умный OOM-киллер, реагирует на давление памяти, а не на swap |
| Swap на SSD | Современный стандарт | Износ минимален благодаря TRIM и wear-leveling. Не бойтесь использовать |
| Swap на HDD / SD | Только при отсутствии SSD | Ожидается сильный троттлинг при активной подкачке |
Чек-лист после настройки
- [ ]
swapon --showпоказывает новый файл/размер - [ ]
free -hотражает изменения - [ ] Запись в
/etc/fstabкорректна и без ошибок синтаксиса - [ ]
vm.swappinessустановлен под вашу нагрузку - [ ]
dmesgне содержит ошибокswapon: failedилиswapfile has holes - [ ] Система прошла перезагрузку без потери swap-устройства