До основного вмісту

Налаштування SWAP на VPS Linux: розширення пам'яті

VDS / VPS · 25.05.2025 · 5 хв читання
Ілюстрація до статті «Налаштування SWAP на VPS Linux: розширення пам'яті»

SWAP — це область на диску, куди ядро Linux вивантажує сторінки пам'яті, коли фізичної RAM не вистачає. На VDS із невеликим обсягом пам'яті swap не дає процесам падати через OOM, але платить за це швидкістю: диск у тисячі разів повільніший за оперативну пам'ять.

Створення swap-файлу

# Створюємо файл 2 ГБ
fallocate -l 2G /swapfile

# Встановлюємо права — swap-файл із відкритими правами ядро відмовиться використовувати
chmod 600 /swapfile

# Форматуємо як swap
mkswap /swapfile

# Активуємо
swapon /swapfile

# Перевірка
swapon --show
free -h

Якщо fallocate недоступний (рідко, на деяких файлових системах на кшталт btrfs зі стисненням), файл створюється повільніше, але надійніше через dd if=/dev/zero of=/swapfile bs=1M count=2048.

Автомонтування swap при завантаженні

# Додати в /etc/fstab
/swapfile  none  swap  sw  0  0

Без цього рядка swap-файл активний лише до перезавантаження — після рестарту сервера free -h знову покаже нуль у колонці Swap, і доведеться повторювати swapon вручну.

Налаштування swappiness

# Перевірити поточне значення (0-100)
cat /proc/sys/vm/swappiness  # За замовчуванням: 60

# Змінити (10 = використовувати swap тільки за гострої потреби)
sysctl vm.swappiness=10

# Постійно
echo "vm.swappiness=10" >> /etc/sysctl.conf

Значення 60 за замовчуванням розраховане на десктопи, де чуйність інтерфейсу важливіша за пропускну здатність сервера. На VDS із базою даних чи вебсервером нижче значення (10–20) відкладає перехід у swap до моменту, коли пам'яті реально не вистачає, а не за першої нагоди звільнити трохи RAM під файловий кеш.

Розбір типових помилок

Помилка swapon: /swapfile: insecure permissions 0644, 0600 suggested — ядро попереджає, що права на файл занадто відкриті: без chmod 600 непривілейований користувач теоретично може прочитати вміст swap, а там може опинитися що завгодно з пам'яті інших процесів, включно з паролями.

swapon: /swapfile: swapon failed: Invalid argument

Ця помилка зазвичай означає, що файл не було відформатовано командою mkswap перед swapon, або файлова система під ним не підтримує swap-файли в поточній конфігурації (наприклад, деякі мережеві ФС чи btrfs без спеціальної підготовки).

Swap заповнюється, а RAM при цьому вільна — ознака не нестачі пам'яті, а високого swappiness у поєднанні з рідко використовуваними, але давно наявними в пам'яті процесами. Ядро може витіснити їх у swap заздалегідь, звільняючи RAM під кеш, навіть коли прямої потреби в цьому немає. Перевіряється через vmstat 1: колонки si/so (swap in/out) мають бути близькі до нуля в спокійному режимі, стійка ненульова активність — уже тривожний сигнал.

Zswap як альтернатива звичайному swap-файлу

Zswap — прошарок у ядрі, який стискає сторінки перед вивантаженням і тримає частину з них у стисненому вигляді прямо в RAM, звертаючись до диска лише коли стиснений пул переповнено. На VDS із SSD це знижує кількість реальних операцій запису на диск за помірного свопінгу:

# Увімкнути zswap на льоту (до наступного перезавантаження)
echo 1 > /sys/module/zswap/parameters/enabled

# Постійно — через параметр ядра в GRUB
# додати zswap.enabled=1 у GRUB_CMDLINE_LINUX
update-grub

Zswap не замінює swap-файл повністю — йому все одно потрібен звичайний swap як резервний рівень, він лише скорочує звернення до нього. Для VDS з 1–2 ГБ RAM і без NVMe-диска це зазвичай дає помітний виграш у чуйності під короткочасними піками пам'яті.

Рекомендації щодо розміру SWAP

RAM сервераРозмір SWAPЗастосування
До 2 ГБ2x RAMБуфер при нестачі пам'яті
2–8 ГБ= RAMСтандартна конфігурація
8–32 ГБ4–8 ГБТільки для екстрених ситуацій
Понад 32 ГБ2–4 ГБТільки для дампів OOM killer
⚠️ SWAP на HDD критично уповільнює сервер. На SSD прийнятно, але активний swap (постійний запис/читання) — ознака нестачі RAM.

Коли swap не вирішує проблему

  • Робочий набір бази даних стабільно більший за RAM плюс swap — сервер постійно свопитиметься під навантаженням, і правильна відповідь тут не збільшення swap, а апгрейд пам'яті чи оптимізація запитів.
  • Диск — мережеве сховище з високою затримкою — swap на такому носії перетворює будь-яке звернення до витісненої сторінки на операцію із затримкою в десятки мілісекунд, що для інтерактивних сервісів відчувається як зависання.
  • Процес регулярно вбивається OOM killer ще до того, як swap встигає заповнитися — це означає не повільний, а надто різкий стрибок споживання пам'яті, і тут допомагає обмеження пам'яті самого процесу (наприклад, через systemd MemoryMax), а не більший swap.

Перевірка результату

  1. Переконайтеся, що swap видно після перезавантаження, а не лише одразу після ручного swapon: перезапустіть сервер і виконайте free -h знову.
  2. Перевірте пріоритет і реальне використання: swapon --show покаже заповненість у стовпці Used.
  3. Порівняйте значення vm.swappiness до і після правки /etc/sysctl.conf: sysctl vm.swappiness має повернути нове значення і після перезавантаження, а не лише в поточній сесії.
  4. Поспостерігайте за vmstat 1 10 під звичайним навантаженням — стійкі ненульові si/so означають, що пам'яті все ще не вистачає, і swap-файл лише пом'якшує симптом, а не вирішує першопричину, розібрану в статті про профілювання продуктивності Linux.
Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці