Swap ist virtueller Speicher, der RAM erweitert, indem Daten auf die Festplatte ausgelagert werden. Die richtige Konfiguration verbessert die Stabilität Ihres Servers.
Swap-Grundlagen
Wozu Swap?
- Erweitert verfügbaren Speicher
- Verhindert Out-of-Memory (OOM)
- Ermöglicht Hibernation
- Puffer für SpeicherspitzenSwap vs. RAM
| Eigenschaft | RAM | Swap | |-------------|-----|------| | Geschwindigkeit | ~25 GB/s | ~500 MB/s (SSD) | | Preis | Teuer | Günstig | | Persistenz | Flüchtig | Persistent | | Latenz | Nanosekunden | Millisekunden |
Swap-Status prüfen
Aktuellen Swap anzeigen
# Übersicht
free -h
# Detailliert
swapon --show
# Alle Swap-Bereiche
cat /proc/swapsSpeichernutzung
# RAM und Swap
free -m
# Detailliert
vmstat 1
# Top-Prozesse nach Swap
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file
done | sort -k 2 -n -r | head -10Swap-Datei erstellen
Swap-Datei anlegen
# 4 GB Swap-Datei erstellen
fallocate -l 4G /swapfile
# Oder mit dd (langsamer, aber universell)
dd if=/dev/zero of=/swapfile bs=1G count=4
# Berechtigungen setzen
chmod 600 /swapfileSwap formatieren und aktivieren
# Als Swap formatieren
mkswap /swapfile
# Swap aktivieren
swapon /swapfile
# Prüfen
swapon --showPermanent einrichten
# /etc/fstab
echo '/swapfile none swap sw 0 0' >> /etc/fstabSwap-Partition erstellen
Mit fdisk
# Partition erstellen
fdisk /dev/sdb
# Befehle:
# n - Neue Partition
# p - Primary
# t - Typ ändern auf 82 (Linux swap)
# w - Schreiben und beendenSwap formatieren
mkswap /dev/sdb1
swapon /dev/sdb1In fstab eintragen
# UUID ermitteln
blkid /dev/sdb1
# /etc/fstab
UUID=xxx-xxx-xxx none swap sw 0 0Swap-Größe
Empfehlungen
| RAM | Swap (ohne Hibernation) | Swap (mit Hibernation) | |-----|------------------------|------------------------| | < 2 GB | 2x RAM | 3x RAM | | 2-8 GB | 1x RAM | 2x RAM | | 8-64 GB | 4-8 GB | 1.5x RAM | | > 64 GB | 4 GB | 1x RAM |
Für Server
Empfehlung:
- Web-Server: 1-2 GB
- Datenbank-Server: 4-8 GB
- VPS mit wenig RAM: 1x RAM
- Dedicated mit viel RAM: 4-8 GB fixSwappiness
Was ist Swappiness?
Swappiness (0-100):
- 0: Swap nur bei absoluter Notwendigkeit
- 10: Minimales Swapping (empfohlen für Server)
- 60: Standard (Ubuntu Desktop)
- 100: Aggressives SwappingAktuellen Wert prüfen
cat /proc/sys/vm/swappinessTemporär ändern
sysctl vm.swappiness=10Permanent ändern
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -pEmpfehlung nach Anwendung
| Anwendung | Swappiness | |-----------|------------| | Server mit viel RAM | 10 | | Datenbank-Server | 1-10 | | Desktop | 60 | | SSD-System | 10 | | HDD-System | 60 |
VFS Cache Pressure
Was ist cache_pressure?
Bestimmt, wie aggressiv der Kernel Caches freigibt:
- 0: Nie freigeben (nicht empfohlen)
- 50: Ausgeglichen
- 100: Standard
- >100: Aggressiv freigebenKonfigurieren
# Temporär
sysctl vm.vfs_cache_pressure=50
# Permanent
echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
sysctl -pSwap verwalten
Swap deaktivieren
# Einzelne Swap-Quelle
swapoff /swapfile
# Allen Swap deaktivieren
swapoff -aSwap reaktivieren
swapon /swapfile
# Oder alle aus fstab
swapon -aSwap-Datei vergrößern
# Swap deaktivieren
swapoff /swapfile
# Datei vergrößern
fallocate -l 8G /swapfile
# Neu formatieren
mkswap /swapfile
# Aktivieren
swapon /swapfileSwap-Datei löschen
swapoff /swapfile
rm /swapfile
# Eintrag aus /etc/fstab entfernenSwap-Priorität
Priorität setzen
# Höhere Priorität = wird zuerst verwendet
swapon -p 10 /swapfile
swapon -p 5 /dev/sdb1In fstab
/swapfile none swap sw,pri=10 0 0
/dev/sdb1 none swap sw,pri=5 0 0ZRAM (komprimierter RAM-Swap)
ZRAM installieren
# Debian/Ubuntu
apt install zram-toolsKonfiguration
# /etc/default/zramswap
# Prozent des RAM für ZRAM
PERCENT=25
# Priorität
PRIORITY=100
# Kompressionsalgorithmus
ALGO=lz4Aktivieren
systemctl enable --now zramswapStatus prüfen
zramctlVorteile von ZRAM
- Schneller als Festplatten-Swap
- Reduziert SSD-Verschleiß
- 2-3x Kompressionsrate möglich
- Ideal für Server mit wenig RAMMonitoring
Swap-Nutzung überwachen
# Kontinuierlich
watch -n 1 'free -h; echo; swapon --show'
# Mit vmstat
vmstat 1
# Mit sar
sar -r 1Swap-intensive Prozesse
# Top Swap-Nutzer
ps aux --sort=-%mem | head -20
# Detailliert pro Prozess
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file 2>/dev/null
done | sort -k 2 -n -r | headAlert bei hohem Swap
#!/bin/bash
# /usr/local/bin/swap-alert.sh
THRESHOLD=80 # Prozent
SWAP_TOTAL=$(free | grep Swap | awk '{print $2}')
SWAP_USED=$(free | grep Swap | awk '{print $3}')
if [ $SWAP_TOTAL -gt 0 ]; then
PERCENT=$((SWAP_USED * 100 / SWAP_TOTAL))
if [ $PERCENT -gt $THRESHOLD ]; then
echo "Swap usage: $PERCENT%" | mail -s "Swap Alert" admin@example.com
fi
fiSwap und SSD
SSD-Optimierung
# Niedrige Swappiness für weniger Schreibzugriffe
vm.swappiness = 10
# TRIM aktivieren (in fstab)
/swapfile none swap sw,discard 0 0Lebensdauer schützen
Empfehlungen für SSD:
- Swappiness auf 10 setzen
- ZRAM vorschalten
- Ausreichend RAM installieren
- Swap auf separate HDD (falls vorhanden)Troubleshooting
System langsam durch Swapping
# Swappiness reduzieren
sysctl vm.swappiness=10
# Swap leeren (wenn genug RAM frei)
swapoff -a && swapon -aOOM-Killer aktiv
# Logs prüfen
dmesg | grep -i "out of memory"
journalctl -k | grep -i oom
# Mehr Swap hinzufügen
fallocate -l 4G /swapfile2
mkswap /swapfile2
swapon /swapfile2Swap wird nicht genutzt
# Swappiness prüfen
cat /proc/sys/vm/swappiness
# Swap aktiviert?
swapon --show
# Berechtigungen
ls -la /swapfile # Muss 600 seinZusammenfassung
| Aufgabe | Befehl | |---------|--------| | Status anzeigen | free -h | | Swap-Datei erstellen | fallocate -l 4G /swapfile | | Formatieren | mkswap /swapfile | | Aktivieren | swapon /swapfile | | Deaktivieren | swapoff /swapfile | | Swappiness setzen | sysctl vm.swappiness=10 | | Permanent | /etc/fstab und /etc/sysctl.conf |
Fazit
Swap ist wichtig für die Systemstabilität, auch bei ausreichend RAM. Für Server empfiehlt sich niedrige Swappiness (10) und moderate Swap-Größe (4-8 GB). Bei SSDs schützt ZRAM die Lebensdauer. Überwachen Sie die Swap-Nutzung und reagieren Sie auf hohe Werte mit RAM-Erweiterung oder Prozess-Optimierung.