Tedval

Swap на маленьком сервере: когда помогает, когда вредит

30 мая 2026

На сервере с гигабайтом памяти swap — не роскошь, а условие, при котором обычные операции вообще выполнимы. Сборка образа, установка пакетов, разовая обработка большого файла спокойно съедают больше доступного, и без файла подкачки процесс просто убивается.

Как это выглядит без swap

Процесс исчезает без объяснений. В выводе команды ничего внятного, зато в системном журнале находится запись ядра:

journalctl -k | grep -i "out of memory"

Там будет строка про убитый процесс и его потребление. Полезно сразу посмотреть, кто именно попал под раздачу: иногда ядро выбирает не того, кто виноват, а того, кто занимал больше всех в этот момент.

Файл вместо раздела

Отдельный раздел под подкачку на облачном сервере создавать неудобно, файл ничем не хуже:

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab

Права обязательно 600: иначе содержимое памяти окажется доступно на чтение любому пользователю системы. Проверка результата — swapon --show и free -h.

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

Где начинается вред

Swap спасает от аварийного завершения, но не заменяет память. Если рабочий набор данных не помещается в оперативную, система начинает непрерывно перекладывать страницы, и производительность падает в разы. Внешне это выглядит хуже падения: сервис вроде жив, но отвечает десятки секунд.

Отсюда практическое правило: подкачка нужна как подушка для пиков, а не как постоянный режим работы. Если free -h в обычной нагрузке показывает заметное использование swap, надо не тюнить параметры, а добавлять память.

Параметр swappiness

Значение по умолчанию — шестьдесят, оно ориентировано на десктоп и охотно выгружает страницы заранее. Для сервера с базой или активным кешем разумнее уменьшить:

vm.swappiness = 10
vm.vfs_cache_pressure = 50

Кладётся в /etc/sysctl.d/ и применяется через sysctl -p. Первое значит «уходить в подкачку только при реальной нехватке», второе — чуть дольше держать кеш метаданных файловой системы, что заметно на операциях с большим количеством мелких файлов.

На дисках без запаса по ресурсу записи стоит помнить, что активная подкачка — это постоянная запись. Ещё один довод в пользу того, чтобы swap оставался страховкой, а не рабочим инструментом.
← Архив Дешёвые проверки доступности →