Создание Swap файла в Ubuntu Linux: спасаем сервер от нехватки RAM
Зачем серверу нужен Swap-файл?
На недорогих виртуальных серверах (VPS) с 1–2 Гб оперативной памяти запуск тяжелых задач (сборка проекта через npm run build, обновление пакетов, запуск базы данных MySQL) приводит к моментальному исчерпанию RAM. В этот момент срабатывает системный механизм OOM Killer (Out Of Memory) и принудительно «убивает» веб-сервер или СУБД. Создание файла подкачки (Swap) на SSD диске позволяет выделить виртуальную память и защитить сервер от внезапных падений.
Симптомы нехватки оперативной памяти:
| Признак | Что происходит на сервере |
|---|---|
| Служба MySQL падает без причин | OOM Killer принудительно завершает процесс mysqld. |
Ошибка Killed в терминале | Процесс компиляции или сборщика превысил лимит RAM. |
Команда free -h показывает Swap: 0B | На сервере полностью отсутствует подкачка. |
Пошаговое создание Swap файла размером 2 ГБ
Шаг 1. Проверяем текущее состояние памяти
free -h sudo swapon --showЕсли строчка Swap пустая, приступаем к созданию.
Шаг 2. Выделяем место под файл подкачки
Создадим файл размером 2 Гб (или 4G при необходимости) с помощью утилиты
fallocate:sudo fallocate -l 2G /swapfile # Если fallocate не поддерживается файловой системой, используем dd: # sudo dd if=/dev/zero of=/swapfile bs=1M count=2048Шаг 3. Устанавливаем строгие права безопасности
Файл подкачки не должен читаться посторонними пользователями:
sudo chmod 600 /swapfileШаг 4. Форматируем и активируем Swap
# Размечаем файл как область подкачки: sudo mkswap /swapfile # Включаем Swap в системе: sudo swapon /swapfileШаг 5. Закрепляем файл в автозагрузке (/etc/fstab)
Чтобы подкачка не отключилась после перезагрузки сервера, добавим запись в файл
/etc/fstab:echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstabШаг 6. Настраиваем баланс использования (Swappiness)
Параметр
swappiness(от 0 до 100) определяет, как охотно Linux сбрасывает данные на диск. Для серверов оптимально значение 10 (использовать диск только при реальном дефиците памяти):sudo sysctl vm.swappiness=10 echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
Частые вопросы (FAQ)
Какой объем Swap-файла нужно создавать?
Общее правило: при объеме RAM до 2 Гб делайте Swap равным объему памяти или х2 (2–4 Гб). При объеме RAM от 4 до 8 Гб достаточно 2–4 Гб подкачки. Делать Swap больше 8 Гб на SSD не имеет практического смысла.
Не испортит ли Swap мой быстрый SSD диск?
При установке vm.swappiness=10 система пишет в Swap только в экстренных случаях, когда физическая память заполнена на 90%. Нагрузка на ресурс SSD при такой настройке минимальна.
Как полностью удалить файл Swap, если он больше не нужен?
Отключите его: sudo swapoff -v /swapfile, удалите строку из /etc/fstab и сотрите сам файл: sudo rm /swapfile.
Работает ли файл подкачки внутри Docker-контейнеров?
Контейнеры Docker по умолчанию используют общий Swap хост-системы, если в docker run не были установлены жесткие лимиты флагом --memory-swap.