Top.Mail.Ru

Swap-файл в Linux: как добавить и настроить на VPS

1
Swap-файл в Linux: как добавить и настроить на VPS

Swap-файл — это область на диске которую Linux использует как дополнительную оперативную память когда физическая RAM заканчивается. Создаётся за 5 команд и не требует перераздела диска. На VPS с 1-2 ГБ RAM swap защищает от OOM Killer — ситуации когда ядро принудительно завершает процессы из-за нехватки памяти.

Зачем нужен swap в Linux

Когда все процессы суммарно потребляют больше RAM чем физически есть, ядро Linux должно что-то сделать. Без swap оно запускает OOM Killer (Out Of Memory Killer) — механизм который принудительно убивает процессы, обычно самый «дорогой» по памяти. Это может быть ваше приложение, база данных или даже SSH-демон.

Swap даёт ядру альтернативу: вместо убийства процесса оно перемещает редко используемые страницы памяти на диск. Это медленнее RAM, но приложения продолжают работать.

Важно понимать: swap не делает VPS быстрее. Это аварийный буфер, а не замена RAM. Если система постоянно использует swap — нужно увеличивать RAM, а не размер swap.

Сколько swap нужно

RAM на VPS Рекомендуемый размер swap
512 МБ 1-2 ГБ
1 ГБ 1-2 ГБ
2 ГБ 2 ГБ
4-8 ГБ 2-4 ГБ
Больше 8 ГБ 4 ГБ или не нужен

На современных VPS с NVMe-дисками swap работает заметно быстрее чем на HDD, но всё равно значительно медленнее RAM — в 10-100 раз в зависимости от нагрузки. Не создавайте swap больше чем нужно: большой swap маскирует реальную проблему нехватки памяти.

Проверка текущего состояния

Посмотреть есть ли swap и сколько используется:

swapon --show

Если вывод пустой — swap не настроен. Общий обзор памяти:

free -h

Создание swap-файла в Linux

Шаг 1: Создать файл нужного размера

Есть два способа. Первый — быстрый через fallocate:

sudo fallocate -l 2G /swapfile

Этот способ мгновенный, но не работает на файловых системах btrfs и некоторых конфигурациях xfs. Если получили ошибку fallocate failed: Operation not supported — используйте второй способ через dd:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

Здесь count=2048 создаёт файл 2048 МБ (2 ГБ). Для других размеров: 1 ГБ = 1024, 4 ГБ = 4096. Команда dd работает на любой файловой системе, но записывает данные посекторно — на NVMe занимает несколько секунд, на HDD дольше.

Проверить что файл создан:

ls -lh /swapfile

Шаг 2: Установить права доступа

Это обязательный шаг — без него mkswap выдаст предупреждение, а swapon откажется активировать файл:

sudo chmod 600 /swapfile

Права 600 означают что только root может читать и изменять файл. Если оставить открытые права — любой пользователь системы теоретически может читать содержимое swap, а там могут оказаться фрагменты чувствительных данных.

Шаг 3: Отформатировать файл как swap

sudo mkswap /swapfile

Шаг 4: Активировать swap

sudo swapon /swapfile

Проверить что swap активирован:

swapon --show

Должна появиться строка с /swapfile и указанным размером. Также проверяется через:

free -h

В строке Swap теперь будет ненулевое значение в столбце total.

Шаг 5: Сделать постоянным после перезагрузки

Без этого шага swap исчезнет после перезагрузки сервера. Добавьте запись в /etc/fstab:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Проверьте что запись добавилась корректно:

cat /etc/fstab | grep swap

Протестируйте запись без перезагрузки:

sudo swapoff -a && sudo swapon -a

Команда отключает и включает все swap-области из fstab. Если ошибок нет — всё настроено верно.

Настройка swappiness

Параметр vm.swappiness управляет тем, насколько охотно ядро перемещает данные из RAM в swap. Значение от 0 до 100.

Посмотреть текущее значение:

cat /proc/sys/vm/swappiness

По умолчанию — 60. Это значит что ядро начинает использовать swap уже при 40% свободной RAM. Для VPS это слишком агрессивно: disk I/O дорог, лишние обращения к swap замедляют работу.

Рекомендуемое значение для VPS: 10. Ядро будет уходить в swap только когда свободной RAM становится совсем мало.

Изменить значение немедленно (без перезагрузки):

sudo sysctl vm.swappiness=10

Чтобы значение сохранялось после перезагрузки:

echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf

Важно: значение swappiness=0 в современных ядрах Linux (начиная с версии 3.5) не означает «полностью отключить swap». Оно означает «не использовать swap пока есть хоть немного свободной памяти». Если хотите минимальное использование — ставьте 1, не 0.

Дополнительно: vfs_cache_pressure

Параллельно со swappiness стоит настроить vfs_cache_pressure — параметр управляет тем насколько агрессивно ядро вытесняет кеш файловой системы (метаданные директорий и файлов).

По умолчанию значение 100 — ядро одинаково охотно вытесняет и кеш ФС и данные приложений. Значение 50 означает что ядро будет дольше держать кеш в памяти прежде чем сбрасывать в swap:

sudo sysctl vm.vfs_cache_pressure=50
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-swap.conf

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

Мониторинг swap

Смотреть использование swap в реальном времени:

watch -n 2 free -h

Обновляет вывод каждые 2 секунды. Нажмите Ctrl+C чтобы выйти.

Если swap используется — найти какие процессы его заняли:

for f in /proc/*/status; do awk '/VmSwap|Name/{printf $2" "$3}END{print ""}' $f; done | sort -k2 -n -r | head -10

Команда показывает топ-10 процессов по использованию swap. Если один процесс занимает значительную часть — возможно именно он стал причиной нехватки памяти.

Удаление swap

Если swap больше не нужен или хотите изменить размер:

Отключить swap:

sudo swapoff /swapfile

Удалить файл:

sudo rm /swapfile

Убрать строку из /etc/fstab:

sudo sed -i '/swapfile/d' /etc/fstab

Для создания swap другого размера — повторите весь процесс создания с нуля.

Часто задаваемые вопросы

Замедляет ли swap-файл работу VPS?

Использование swap само по себе означает что системе не хватает RAM, поэтому производительность уже снижена. Swap на NVMe работает значительно быстрее чем на HDD, но всё равно медленнее RAM в 10-100 раз. Swap предотвращает падение приложений, но не заменяет добавление реальной памяти.

Почему swappiness=0 не отключает swap?

В ядре Linux начиная с версии 3.5 значение 0 не означает «никогда не использовать swap». Оно означает «не использовать swap пока есть хоть немного свободной RAM». При нулевом остатке памяти ядро всё равно начнёт использовать swap. Чтобы полностью отключить swap — выполните sudo swapoff -a, но без swap при нехватке памяти OOM Killer будет убивать процессы.

Нужен ли swap если у VPS 4 ГБ RAM и больше?

Зависит от задач. При 4+ ГБ RAM большинство стандартных веб-приложений не упираются в память. Но если запускаете базу данных, Java-приложение или несколько сервисов одновременно — небольшой swap (2 ГБ) как аварийный буфер всё равно полезен. Следите через free -h: если RAM используется меньше чем на 80% в пике — swap не нужен.

Можно ли создать несколько swap-файлов?

Да. Linux поддерживает несколько swap-областей одновременно. Каждую нужно создать, отформатировать и добавить в fstab отдельно. Но обычно это излишне: проще создать один файл нужного размера.

Как понять что swap исчерпан и нужно больше RAM?

Признаки: swap заполнен более чем на 80% постоянно, приложения работают медленно, в логах появляются сообщения об OOM. Проверьте командой free -h в разное время суток. Если swap постоянно занят — нужен апгрейд RAM, увеличение swap только отложит проблему.

На UFO.Hosting каждый VPS работает на NVMe-дисках — swap на таких серверах значительно быстрее чем на HDD-хостингах. Если swap постоянно заполнен, рассмотрите апгрейд тарифа с большим объёмом RAM в личном кабинете.

Документация ядра Linux.

Похожее

Все статьи
cron linux

Cron в Linux: автоматизация задач — полное руководство

Cron — планировщик задач в Linux, который запускает команды и скрипты по расписанию. Чтобы добавить задачу, достаточно одной строки в специальном файле — crontab. После сохранения cron подхватывает изменения автоматически и больше не требует вашего участия. Как работает cron Демон…

nginx установка на ubuntu

Nginx: установка и настройка на Ubuntu 22.04 и 24.04

Nginx устанавливается на Ubuntu одной командой и начинает работать сразу после этого. Весь процесс — от чистого сервера до работающего сайта — занимает около десяти минут. Ниже разберём установку, настройку файрвола, создание виртуального хоста и основные команды для повседневной работы.…