Маленьким серверам не хватает памяти в самый неподходящий момент: apt upgrade, сборка Docker, ночной бэкап. Без свопа OOM killer ядра выбирает процесс и завершает его — часто вашу базу данных. Своп-файл — дешёвый ремень безопасности, который даёт этим пикам куда деться. Нужно пять команд.
1. Проверьте, что есть сейчас
swapon --show
free -h
Если swapon --show ничего не выводит, свопа пока нет.
2. Создайте своп-файл
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
chmod 600 важен: в свопе могут оказаться обрывки чего угодно из памяти, включая секреты, поэтому читать его может только root. Если fallocate ругается «operation not supported», используйте dd:
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
3. Сделайте его постоянным
Без этого шага своп пропадёт после перезагрузки:
echo '/swapfile none swap sw 0 0' >> /etc/fstab
4. Настройте swappiness
Попросите ядро предпочитать RAM и использовать своп в основном при нехватке:
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swap.conf
sysctl --system
5. Проверьте
swapon --show
free -h
Должно появиться устройство свопа на 2 ГБ, а cat /proc/sys/vm/swappiness должен вывести 10.
Какого размера делать?
- Сервер с 1–2 ГБ RAM: своп 1–2 ГБ.
- 4 ГБ и больше: 1–2 ГБ по-прежнему достаточно как страховки.
Не делайте своп «вдвое больше RAM». На сервере своп нужен, чтобы поглощать короткие пики, а не запускать задачи, которые не помещаются в память.
Когда своп — не решение
Понаблюдайте несколько дней:
vmstat 5
Колонки si и so показывают страницы, загруженные из свопа и выгруженные в него за секунду. Изредка — нормально. Постоянные ненулевые значения значат, что памяти не хватает и всё ждёт диск. Тогда решение — больше RAM: см. сколько RAM нужно VPS. В EQVPS можно перейти на тариф побольше без переустановки; данные сохранятся.
Комментарии
Пока нет комментариев. Будьте первым.