Servery a DevOps

Swap na VPS: kolik ho dát, swappiness a zram

Jak vytvořit swap soubor, nastavit vm.swappiness, kdy zvážit zram a jak poznat, že swap jen zakrývá nedostatek RAM. Včetně příkazů pro Ubuntu.

12. 10. 2026 · 3 min čtení

Swap je místo na disku, kam kernel odkládá málo používané stránky paměti. Na malém VPS rozhoduje o tom, jestli krátká špička skončí zpomalením, nebo pádem databáze kvůli OOM killeru. Zároveň ale swap nenahradí RAM – disk je o řády pomalejší.

Zjistěte aktuální stav

swapon --show
free -h

Pokud swapon --show nic nevypíše, swap nemáte. To je u cloudových obrazů běžné.

Kolik swapu

Pro servery neexistuje univerzální pravidlo, ale tohle je rozumný výchozí bod:

RAM Doporučený swap
1 GB 1–2 GB
2 GB 2 GB
4–8 GB 2–4 GB
16 GB a víc 2–4 GB jako pojistka

Hibernaci na serveru neřešíte, takže swap nemusí odpovídat velikosti RAM.

Vytvoření swap souboru

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Trvale přes /etc/fstab:

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

Na souborových systémech, kde fallocate pro swap nefunguje (např. starší XFS), použijte dd:

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

Na Btrfs swap soubor vyžaduje zvláštní postup (vypnutý copy-on-write); novější verze btrfs-progs na to mají příkaz btrfs filesystem mkswapfile.

Ověření po restartu:

sudo reboot
# po připojení:
swapon --show

Zvětšení existujícího swapu

sudo swapoff /swapfile
sudo fallocate -l 4G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

swapoff musí stránky ze swapu vrátit do RAM. Když na to RAM nestačí, příkaz selže – udělejte to v klidné chvíli.

vm.swappiness

Parametr vm.swappiness (0–200, výchozí 60) určuje, jak ochotně kernel odkládá paměť procesů do swapu oproti zahazování cache souborů.

cat /proc/sys/vm/swappiness

Pro servery s databází nebo aplikacemi, kde chcete udržet procesy v RAM, se obvykle používá nižší hodnota:

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

Hodnota 0 swap nevypíná, ale říká, že kernel má swapovat až při velkém tlaku na paměť. Pro většinu VPS je 10 rozumný kompromis.

Další často upravovaný parametr je vm.vfs_cache_pressure (výchozí 100), ale bez měření ho neměňte.

zram: komprimovaný swap v RAM

zram vytvoří blokové zařízení v RAM, kam se stránky ukládají komprimovaně. Odkládání je pak mnohem rychlejší než na disk a na VPS s pomalým úložištěm to může výrazně pomoct. Daní je trochu CPU na kompresi.

Na Ubuntu je jednoduchá cesta přes balíček systemd-zram-generator:

sudo apt install systemd-zram-generator
sudo nano /etc/systemd/zram-generator.conf
[zram0]
zram-size = ram / 2
compression-algorithm = zstd
sudo systemctl daemon-reload
sudo systemctl start [email protected]
swapon --show

zram a swap soubor lze kombinovat. Zařízení s vyšší prioritou (zram ji generátor nastavuje vysokou) se použije přednostně, disk až potom.

Kdy swap jen zakrývá problém

Swap je v pořádku, když je využitý staticky – např. 300 MB nepoužívaných stránek leží ve swapu měsíc. Problém je neustálý pohyb dat:

vmstat 2 10

Pokud jsou ve sloupcích si a so trvale nenulová čísla, server swapuje aktivně a vše se zpomaluje. Možnosti:

  • snížit počet workerů (PHP-FPM pm.max_children, Gunicorn --workers),
  • zmenšit buffery databáze (innodb_buffer_pool_size),
  • najít proces, který paměť nečekaně spotřebovává (htop, řazení M),
  • přejít na větší tarif.

Kdo swap používá:

for f in /proc/[0-9]*/status; do
  awk '/^Name/{n=$2} /^VmSwap/{if ($2>0) print $2" kB", n}' "$f"
done 2>/dev/null | sort -rn | head

Shrnutí

  • Malý swap (1–2 GB) chrání před náhlými pády kvůli OOM.
  • vm.swappiness=10 udrží aktivní procesy v RAM.
  • zram pomůže na VPS s pomalým diskem.
  • Trvalé si/so v vmstat je signál, že chybí RAM, ne že chybí swap.