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 Speicherspitzen
Swap 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/swaps
Speichernutzung
# 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 -10
Swap-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 /swapfile
# Als Swap formatieren
mkswap /swapfile
# Swap aktivieren
swapon /swapfile
# Prüfen
swapon --show
Permanent einrichten
# /etc/fstab
echo '/swapfile none swap sw 0 0' >> /etc/fstab
Swap-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 beenden
mkswap /dev/sdb1
swapon /dev/sdb1
In fstab eintragen
# UUID ermitteln
blkid /dev/sdb1
# /etc/fstab
UUID=xxx-xxx-xxx none swap sw 0 0
Swap-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 fix
Swappiness
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 Swapping
Aktuellen Wert prüfen
cat /proc/sys/vm/swappiness
Temporär ändern
sysctl vm.swappiness=10
Permanent ändern
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p
Empfehlung 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 freigeben
Konfigurieren
# Temporär
sysctl vm.vfs_cache_pressure=50
# Permanent
echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
sysctl -p
Swap verwalten
Swap deaktivieren
# Einzelne Swap-Quelle
swapoff /swapfile
# Allen Swap deaktivieren
swapoff -a
Swap reaktivieren
swapon /swapfile
# Oder alle aus fstab
swapon -a
Swap-Datei vergrößern
# Swap deaktivieren
swapoff /swapfile
# Datei vergrößern
fallocate -l 8G /swapfile
# Neu formatieren
mkswap /swapfile
# Aktivieren
swapon /swapfile
Swap-Datei löschen
swapoff /swapfile
rm /swapfile
# Eintrag aus /etc/fstab entfernen
Swap-Priorität
Priorität setzen
# Höhere Priorität = wird zuerst verwendet
swapon -p 10 /swapfile
swapon -p 5 /dev/sdb1
In fstab
/swapfile none swap sw,pri=10 0 0
/dev/sdb1 none swap sw,pri=5 0 0
ZRAM (komprimierter RAM-Swap)
ZRAM installieren
# Debian/Ubuntu
apt install zram-tools
Konfiguration
# /etc/default/zramswap
# Prozent des RAM für ZRAM
PERCENT=25
# Priorität
PRIORITY=100
# Kompressionsalgorithmus
ALGO=lz4
Aktivieren
systemctl enable --now zramswap
Status prüfen
zramctl
Vorteile von ZRAM
- Schneller als Festplatten-Swap
- Reduziert SSD-Verschleiß
- 2-3x Kompressionsrate möglich
- Ideal für Server mit wenig RAM
Monitoring
Swap-Nutzung überwachen
# Kontinuierlich
watch -n 1 'free -h; echo; swapon --show'
# Mit vmstat
vmstat 1
# Mit sar
sar -r 1
Swap-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 | head
Alert 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
fi
Swap und SSD
SSD-Optimierung
# Niedrige Swappiness für weniger Schreibzugriffe
vm.swappiness = 10
# TRIM aktivieren (in fstab)
/swapfile none swap sw,discard 0 0
Lebensdauer 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 -a
OOM-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 /swapfile2
Swap wird nicht genutzt
# Swappiness prüfen
cat /proc/sys/vm/swappiness
# Swap aktiviert?
swapon --show
# Berechtigungen
ls -la /swapfile # Muss 600 sein
Zusammenfassung
| 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.