Вопрос из обсуждения. Виртуальная машина с Ubuntu Server 22.04 и небольшим объёмом памяти, разметку менять нельзя. Нужен ли swap и как его сделать?
Что ответили участники. Виртуальную машину настраивать так же, как обычную Ubuntu: swap может быть разделом или файлом. Когда переразметка недоступна, файл подкачки полностью решает задачу. Опасения про фрагментацию файла на ext4 теоретические: файловая система сама её избегает. Файл проще: его можно увеличить, уменьшить или убрать без перезагрузки. И первое, что стоит проверить: возможно, swap уже есть (swapon --show, free -h), многие образы идут с ним.
Наша позиция. Swap на сервере с 1–4 ГБ памяти нужен, но не как «дополнительная память», а как буфер: он даёт ядру возможность выгрузить редко используемые страницы и пережить короткий всплеск вместо мгновенного OOM-killer. Размер: 1–2 ГБ при памяти до 2 ГБ, дальше 2–4 ГБ; правило «двойной объём памяти» устарело. Если swap заполнен постоянно (vmstat 5 показывает ненулевые si/so круглые сутки), это не решение, а сигнал добавить памяти или убрать лишнее.
Как добавить файл подкачки.
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
Проверка: swapon --show, free -h. На btrfs fallocate не подходит: нужен файл без копирования при записи (chattr +C) или отдельный подтом; на ext4 и xfs команды выше работают как есть.
Swappiness. По умолчанию 60, что рассчитано на рабочие станции. Для сервера обычно 10: ядро держит данные в памяти и уходит в swap только под реальным давлением. sysctl vm.swappiness=10 и строка vm.swappiness=10 в /etc/sysctl.d/99-swap.conf.
Два предостережения.
- Swap на медленном сетевом диске делает сервер под нагрузкой не «медленным», а «висящим»: если диск виртуальной машины на HDD-хранилище, лучше меньше swap и жёсткий контроль памяти сервисов.
- Swap не заменяет лимиты: MySQL или Java с настройками «под всю память» сначала съедят память, потом swap, и OOM всё равно придёт, только на час позже.
Настройка описана в руководстве сообщества Ubuntu.