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.
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=10udrží aktivní procesy v RAM.- zram pomůže na VPS s pomalým diskem.
- Trvalé
si/sovvmstatje signál, že chybí RAM, ne že chybí swap.