BLACKBOXЦентр помощи

Добавление файла подкачки (swap)

Как создать файл подкачки на сервере с малым объёмом памяти, как его настроить и когда лучше сделать апгрейд.

общееОбновлено 2026-10-09~7 мин чтения
На этой странице

Swap (подкачка) — это место на диске, которое Linux использует как запасную память, когда заканчивается оперативная память (ОЗУ). В этом руководстве описано, как создать файл подкачки, настроить его и удалить. Все команды выполняются на сервере в SSH-сессии под root (Подключение к серверу по SSH (Windows, macOS, Linux)). Объём ОЗУ вашего тарифа указан в панели app.blackbox.md: на карточке сервера на странице «Мои серверы», в поле «Конфигурация».

Доступно: владельцу сервера с доступом по SSH как root. Команды одинаковы для всех Linux-систем, доступных при заказе: Ubuntu, Debian, AlmaLinux и CentOS Stream. В AlmaLinux и CentOS Stream добавляется всего один шаг, он отмечен в тексте.

Когда swap помогает

Файл подкачки полезен, если:

  • у сервера 1–2 GB ОЗУ;
  • память заканчивается лишь время от времени, например при пиках трафика или во время задания по расписанию;
  • вы устанавливаете или собираете пакеты (обновления системы, composer, npm), которым ненадолго нужно много памяти.

Без swap при нехватке памяти ядро Linux принудительно завершает какой-нибудь процесс (OOM killer), обычно самый крупный: базу данных или веб-сервер. Со swap сервер замедляется, но процессы продолжают работать, пока не заполнится и подкачка.

Тариф ОЗУ Диск Рекомендуемый swap
Basic XS 1 GB 20 GB 1 GB
Standard S 2 GB 20 GB 1 GB
CPU S 2 GB 30 GB 1 GB
Basic S 2 GB 50 GB 2 GB

На тарифах с 4 GB ОЗУ и больше swap обычно не нужен. Файл на 1 GB можно оставить как запас на случай редких пиков.

Важно Swap не заменяет оперативную память: диск во много раз медленнее ОЗУ. Если сервер постоянно пользуется подкачкой, ему нужен тариф с большим объёмом ОЗУ. Признаки описаны ниже, в разделе «Когда нужен апгрейд».

Проверьте память и текущий swap

free -h
swapon --show

Пример вывода на сервере без swap:

               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       1.2Gi       118Mi        12Mi       640Mi       560Mi
Swap:             0B          0B          0B
  • Если в строке Swap: стоит 0B, а swapon --show ничего не выводит, подкачки на сервере нет. BLACKBOX не добавляет swap при установке сервера, поэтому на новом сервере обычно так и есть.
  • Столбец available показывает, сколько памяти ещё доступно приложениям.
  • Значение total в строке Mem: немного меньше объёма ОЗУ тарифа: часть памяти резервирует система.

Если swapon --show уже показывает файл или раздел, не создавайте ещё один. Как изменить размер существующего swap, описано в частых вопросах в конце статьи.

Проверьте и свободное место на диске. В столбце Avail должно оставаться заметно больше, чем размер создаваемого swap:

df -h /

Создайте файл подкачки

Команды создают файл /swapfile размером 2 GB. Для 1 GB укажите 1G вместо 2G.

  1. Зарезервируйте место на диске:

    fallocate -l 2G /swapfile
  2. Оставьте доступ к файлу только для root:

    chmod 600 /swapfile
  3. Подготовьте файл как область подкачки:

    mkswap /swapfile
  4. Только в AlmaLinux и CentOS Stream, где включён SELinux, назначьте файлу метку SELinux, предусмотренную для /swapfile:

    restorecon -v /swapfile
  5. Включите swap:

    swapon /swapfile
  6. Проверьте командой swapon --show. Вывод будет таким, а в free -h строка Swap: перестанет показывать 0B:

    NAME      TYPE SIZE USED PRIO
    /swapfile file   2G   0B   -2

Swap работает до следующей перезагрузки. Чтобы он включался автоматически при каждом запуске, добавьте его в /etc/fstab (следующий раздел).

Если fallocate не срабатывает

Если fallocate выдаёт Operation not supported или swapon не принимает файл (it appears to have holes или Invalid argument), создайте файл командой dd. Это дольше, зато dd целиком записывает файл на диск и срабатывает там, где fallocate не помогает. count — размер в МБ: 2048 для 2 GB, 1024 для 1 GB.

rm -f /swapfile
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

Затем повторите шаги 2–6 выше.

Включите swap при каждом запуске

  1. Сделайте копию файла /etc/fstab:

    cp /etc/fstab /etc/fstab.bak
  2. Убедитесь, что строки для /swapfile ещё нет. Команда не должна ничего вывести:

    grep swapfile /etc/fstab
  3. Добавьте строку в конец файла:

    echo '/swapfile none swap sw 0 0' >> /etc/fstab
  4. Перечитайте конфигурацию systemd:

    systemctl daemon-reload
  5. Проверьте строку без перезагрузки: отключите swap и снова включите его по /etc/fstab. Если в выводе есть /swapfile, строка записана правильно.

    swapoff /swapfile
    swapon -a
    swapon --show

Если в /etc/fstab что-то пошло не так, восстановите копию до любой перезагрузки:

cp /etc/fstab.bak /etc/fstab

Внимание На шаге 3 ставьте два знака >>. С одним > команда заменит всё содержимое /etc/fstab, и сервер может перестать нормально загружаться. Веб-консоли у клиентов нет, поэтому исправить файл после перезагрузки вы не сможете. Если доступ потерян, напишите нам: Как связаться с поддержкой BLACKBOX.

Настройте swappiness

Параметр vm.swappiness определяет, насколько охотно ядро переносит данные из ОЗУ в swap. Значение по умолчанию обычно 60. При значении 10 ядро как можно дольше держит приложения в ОЗУ и переносит данные в подкачку в основном тогда, когда память почти заполнена.

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

    cat /proc/sys/vm/swappiness
  2. Установите значение 10 сразу:

    sysctl vm.swappiness=10
  3. Чтобы настройка сохранилась после перезагрузки, запишите её в новый файл в /etc/sysctl.d/. Здесь один знак > уместен: файл новый.

    echo 'vm.swappiness=10' > /etc/sysctl.d/99-swappiness.conf
  4. Проверьте файл. Должно вывестись vm.swappiness = 10:

    sysctl -p /etc/sysctl.d/99-swappiness.conf

Когда нужен апгрейд

Swap выручает при редких пиках. Если памяти не хватает постоянно, решение — больше ОЗУ. Признаки:

  • в free -h значение used в строке Swap: растёт и остаётся высоким, а available в строке Mem: близко к нулю;

  • сервер отвечает медленно, хотя процессор не загружен;

  • в выводе команды ниже столбцы si и so (данные, прочитанные из swap и записанные в swap, в секунду) больше 0 почти при каждом замере:

    vmstat 1 5
  • в журнале ядра есть записи о процессах, завершённых из-за нехватки памяти (команда показывает сообщения с последней загрузки):

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

Что делать:

  1. Выясните, какой процесс расходует память и можно ли его настроить: Диагностика нагрузки сервера (CPU, RAM, диск, сеть).
  2. Если приложению действительно нужно больше памяти, перейдите на больший тариф того же семейства кнопкой «Апгрейд» на карточке сервера: Апгрейд сервера: переход на больший тариф.
Текущий тариф Следующий тариф в семействе ОЗУ Диск
Basic XS Basic S 1 → 2 GB 20 → 50 GB
Basic S Basic M 2 → 4 GB 50 → 100 GB
Standard S Standard M 2 → 4 GB 20 → 40 GB
CPU S CPU M 2 → 4 GB остаётся 30 GB

Цены всех тарифов — в статье Тарифы VPS: как выбрать. После апгрейда файл подкачки остаётся на сервере: его можно оставить как запас или удалить.

Если на сервере подключена дополнительная услуга «Мониторинг», график «Использование ОЗУ (%)» в блоке «Динамика» на странице «Мониторинг» показывает расход памяти во времени. Swap на этом графике не учитывается: его проверяйте на сервере командой free -h. Подробнее: Страница «Мониторинг».

Swap и место на диске

  • Файл подкачки занимает на диске весь свой объём, даже если не используется: 2 GB swap — это на 2 GB меньше места для данных.
  • На дисках 20–30 GB (Basic XS, Standard S и семейство CPU) не делайте swap больше 1 GB. В семействах CPU (30 GB) и High-Frequency Compute (50 GB) диск не увеличивается и после апгрейда.
  • Исключите /swapfile из резервных копий: после перезагрузки его содержимое уже не нужно.
  • Если диск заполняется, уменьшите или удалите swap и следуйте статье Диск сервера заполнен.

Удалите swap

  1. Проверьте память. Значение available в строке Mem: должно быть больше, чем used в строке Swap:, иначе данным из подкачки некуда переместиться:

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

    swapoff /swapfile
  3. Удалите строку из /etc/fstab. Команда сохранит копию файла в /etc/fstab.bak:

    sed -i.bak '/^\/swapfile /d' /etc/fstab
  4. Убедитесь, что строки больше нет (первая команда не должна ничего вывести), и перечитайте конфигурацию:

    grep swapfile /etc/fstab
    systemctl daemon-reload
  5. Удалите файл:

    rm /swapfile
  6. Если вы меняли swappiness, удалите и этот файл. Значение по умолчанию вернётся после следующей перезагрузки:

    rm /etc/sysctl.d/99-swappiness.conf

Частые сообщения об ошибках

Сообщение Что это значит Что делать
fallocate: fallocate failed: Operation not supported Файловая система не поддерживает fallocate. Создайте файл командой dd.
swapon: /swapfile: skipping - it appears to have holes. или swapon: /swapfile: swapon failed: Invalid argument Файл записан на диск не полностью, или файловая система не принимает файл, созданный через fallocate. Удалите файл и создайте его командой dd.
swapon: /swapfile: insecure permissions 0644, 0600 suggested. Файл могут читать другие пользователи. Выполните chmod 600 /swapfile.
swapon: /swapfile: swapon failed: Device or resource busy Swap уже включён. Проверьте командой swapon --show. Больше ничего делать не нужно.
No space left on device (при fallocate или dd) На диске недостаточно свободного места. Выберите размер поменьше или освободите место.
swapoff: /swapfile: swapoff failed: Cannot allocate memory Свободной ОЗУ не хватает для данных из подкачки. Временно остановите крупные приложения и повторите. Или удалите строку из /etc/fstab, перезагрузите сервер и затем удалите файл.

Частые вопросы

Какой размер swap выбрать? 1 GB на дисках 20–30 GB и 2 GB на остальных серверах с 1–2 GB ОЗУ. Больший swap редко помогает: если серверу нужно больше памяти, выберите тариф с большим объёмом ОЗУ.

Как изменить размер swap? Отключите swap, удалите файл и создайте его заново нужного размера (в примере — 1 GB). В AlmaLinux и CentOS Stream перед swapon выполните также restorecon -v /swapfile. Строка в /etc/fstab остаётся прежней.

swapoff /swapfile
rm /swapfile
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

Замедляет ли swap сервер? Нет, пока он используется изредка. Замедление начинается, когда сервер постоянно переносит данные в подкачку. Тогда нужно больше ОЗУ, а не больше swap.

Не нашли ответ?Напишите нам — служба поддержки ответит. support@blackbox.md
Открыть тикет