Swap na VPS — konfiguracja, rozmiar i swappiness
Co to jest swap i kiedy jest potrzebny?
Swap to przestrzeń na dysku używana jako "zapasowa pamięć RAM". Gdy system wyczerpuje fizyczny RAM, przenosi nieużywane strony pamięci do swapa, zwalniając RAM dla aktywnych procesów. Swap na dysku jest 10-100x wolniejszy niż RAM — jest buforem bezpieczeństwa, nie rozwiązaniem problemu braku pamięci.
| RAM | Zalecany swap | Uwagi |
|---|---|---|
| 512 MB - 1 GB | 1-2 GB | Małe VPS — swap ratuje przed OOM killer |
| 2-4 GB | 1-2 GB | Standardowe VPS — swap jako zabezpieczenie |
| 8 GB+ | 0.5-1 GB lub brak | Duże serwery — swap może spowalniać DB |
Powiązane tematy: Docker na VPS, logi serwera, PHP-FPM pool oraz Redis cache. Porównaj serwery VPS na stronie VPS.
Sprawdzenie aktualnego stanu swap
# Sprawdź czy swap istnieje
swapon --show
# Użycie pamięci i swap
free -h
# Szczegółowe info
cat /proc/swaps Tworzenie pliku swap (zalecane dla VPS)
Plik swap jest elastyczniejszy niż dedykowana partycja — można go łatwo usunąć lub zmienić rozmiar. Na VPS z dyskiem SSD plik swap jest praktycznie równie wydajny jak partycja.
# Stwórz plik swap (2 GB)
sudo fallocate -l 2G /swapfile
# Ustaw uprawnienia (tylko root może czytać)
sudo chmod 600 /swapfile
# Sformatuj jako swap
sudo mkswap /swapfile
# Aktywuj swap
sudo swapon /swapfile
# Weryfikacja
swapon --show Trwała konfiguracja — /etc/fstab
# Dodaj do /etc/fstab żeby swap był aktywny po restarcie
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# Weryfikuj /etc/fstab
cat /etc/fstab Swappiness — kiedy system używa swap
Parametr swappiness (0-100) kontroluje jak agresywnie kernel używa swap:
- 0 — kernel unika swap tak długo jak możliwe (tylko gdy absolutnie konieczne)
- 10 — zalecane dla serwerów z bazami danych
- 60 — domyślna wartość Linux (balans)
- 100 — agresywne swapowanie
# Sprawdź aktualne swappiness
cat /proc/sys/vm/swappiness
# Zmień na 10 (tymczasowo)
sudo sysctl vm.swappiness=10
# Trwała zmiana (po restarcie)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p Rekomendacja: Dla VPS z WordPress/PHP: swappiness=10. Dla
serwerów z PostgreSQL/MySQL: swappiness=1 — bazy danych bardzo cierpią na swap.
VFS cache pressure — optymalizacja dla SSD
Parametr vfs_cache_pressure kontroluje jak agresywnie kernel zwalnia pamięć podręczną
inodes i dentries (metadane systemu plików):
# Domyślnie 100 — kernel aktywnie zwalnia cache
# Dla SSD VPS — obniż do 50 (lepsza wydajność FS)
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p Monitorowanie użycia swap
# Live monitoring
watch -n 2 free -h
# Procesy używające swap
for file in /proc/*/status; do
awk '/VmSwap|Name/ {printf $2 " "} END { print "" }' $file
done | sort -k 2 -n -r | head 10
# vmstat — statystyki swap (si = swap in, so = swap out)
vmstat 2 5
# iotop — I/O dysku (wysoki I/O + swap = problem)
sudo iotop -o Jeśli swap jest stale powyżej 50% użycia — zwiększ RAM, a nie swap. Intensywne
swapowanie (wysokie so w vmstat) oznacza że serwer jest przeciążony.
Usunięcie i zmiana rozmiaru swap
# Dezaktywuj swap
sudo swapoff /swapfile
# Usuń plik
sudo rm /swapfile
# Usuń z /etc/fstab (edytuj ręcznie)
sudo nano /etc/fstab
# Stwórz nowy swap o innym rozmiarze (np. 4 GB)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile Swap na VPS z dyskiem HDD vs SSD
Na VPS z dyskiem HDD: swap jest bardzo wolny (~80-150 MB/s sequential). Intensywne swapowanie sprawia że serwer staje się praktycznie niedostępny. Minimalizuj swap i monitoruj zużycie RAM.
Na VPS z dyskiem SSD NVMe: swap jest znacznie szybszy (~1-3 GB/s sequential). Nadal wolniejszy niż RAM (~20-50 GB/s), ale akceptowalny dla rzadkich spiků użycia pamięci. Większość nowoczesnych VPS używa SSD — sprawdź specyfikację przed konfiguracją swap.