Оптимизация swap в Ubuntu LTS: файл, раздел, swappiness

На Ubuntu LTS (20.04, 22.04, 24.04) swap выручает, когда RAM заканчивается: система сбрасывает редко используемые страницы на диск и продолжает работать. Ниже – как посмотреть текущую подкачку, выбрать объём, добавить swap-файл или раздел, настроить fstab, swappiness и убрать swap, если он больше не нужен.

Что такое пространство подкачки

Swap – выделенное место на диске под временное хранение данных из оперативной памяти. Когда free RAM почти нет, ядро переносит часть страниц в swap. Диск заметно медленнее RAM, поэтому swap – страховка от OOM, а не замена памяти. Имеет смысл настроить его осознанно, а не «на глаз».

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

Список активных устройств и файлов подкачки:

swapon --show
# или
swapon -s

Общая картина по RAM и swap в удобном виде:

free -h

В выводе free смотрите строки Mem и Swap: total, used, free. Если Swap used постоянно высок при свободной RAM, стоит посмотреть на swappiness (об этом ниже).

Какой объём swap выбрать

Ориентиры зависят от объёма RAM и сценария (сервер, десктоп, гибернация):

  • RAM до 4 ГБ – часто берут swap примерно в 2 раза больше RAM;
  • RAM 8 ГБ – swap порядка 8 ГБ или чуть меньше;
  • RAM 16 ГБ и больше – часто достаточно 4-8 ГБ, если нет гибернации и тяжёлых пиков памяти.

Для гибернации (suspend-to-disk) swap должен быть не меньше объёма RAM: в него целиком пишется образ памяти. На VPS с SSD и редкими пиками нагрузки можно обойтись меньшим swap, но без него при нехватке RAM процессы чаще убивает OOM killer.

Добавить swap-файл

Удобный вариант без переразметки диска. Пример на 8 ГБ.

1. Отключить текущий swap (если нужно пересоздать)

sudo swapoff -a

Если уже есть старый /swapfile, который вы заменяете, после swapoff его можно удалить. Если добавляете второй файл рядом с существующим, swapoff -a не обязателен.

2. Создать файл нужного размера

sudo fallocate -l 8G /swapfile

Если fallocate недоступен или файловая система не поддерживает его для swap, используйте dd:

sudo dd if=/dev/zero of=/swapfile bs=1M count=8192 status=progress

3. Права, mkswap, включение

Файл подкачки должен быть доступен только root:

sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Проверка:

swapon --show
free -h

4. Автозагрузка через fstab

Чтобы swap поднимался после перезагрузки, добавьте строку в /etc/fstab:

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

Либо откройте файл редактором (sudo nano /etc/fstab) и допишите ту же строку вручную. Перед правкой fstab имеет смысл сделать копию: ошибка в fstab может помешать нормальной загрузке.

sudo cp /etc/fstab /etc/fstab.bak

Swap на отдельном разделе

Если есть выделенный раздел (например /dev/sdX или /dev/nvme0n1pY), подкачку делают прямо на нём. Тип раздела в таблице разделов обычно Linux swap (код 82 для MBR / тип swap для GPT). Форматировать его в ext4 не нужно.

# подставьте свой раздел
sudo mkswap /dev/sdX
sudo swapon /dev/sdX

Для автозапуска в fstab надёжнее UUID, а не путь вида /dev/sdX (буквы устройств могут смениться):

sudo blkid /dev/sdX

В fstab:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none swap sw 0 0

Либо, если путь стабилен:

/dev/sdX none swap sw 0 0

Как убрать swap

Для файла:

sudo swapoff /swapfile
sudo rm /swapfile

Удалите соответствующую строку из /etc/fstab, иначе при следующей загрузке система будет искать несуществующий swap. Для раздела: sudo swapoff /dev/sdX, правка fstab, при необходимости переразметка через fdisk/parted.

Swappiness и типичные проблемы

Мало места на диске. Перед fallocate/dd проверьте df -h: файл 8 ГБ не создастся, если свободно меньше.

Ошибка в fstab. Система может зависнуть на этапе монтирования. Загрузка в recovery/live, правка /etc/fstab (или восстановление из fstab.bak).

Swap «шуршит» при свободной RAM. Параметр vm.swappiness (0-100) влияет на готовность ядра сбрасывать страницы в swap. На десктопе часто ставят 10-20, на серверах смотрят по нагрузке. Временно:

sudo sysctl vm.swappiness=10

Постоянно – файл в /etc/sysctl.d/, например:

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

Текущее значение: cat /proc/sys/vm/swappiness.

Краткий чеклист

  • free -h / swapon --show – что есть сейчас;
  • создать файл (fallocate или dd) или раздел;
  • chmod 600, mkswap, swapon;
  • строка в fstab, бэкап fstab перед правкой;
  • при необходимости – swappiness и гибернация (swap ≥ RAM).

Шаги одинаково применимы к Ubuntu 20.04, 22.04 и 24.04 LTS: утилиты swapon, mkswap, fallocate и fstab здесь ведут себя предсказуемо.

Источники и ссылки


Комментарии загружаются…