Swap ist virtueller Speicher, der RAM auf die Festplatte auslagert. Er verhindert Out-of-Memory-Situationen und ermöglicht Hibernation.
Swap-Status prüfen
# Swap-Nutzung anzeigen
free -h
swapon --show
# Detailliert
cat /proc/swaps
vmstat -s
# Swap-Aktivität
vmstat 1Swap-Partition
Partition erstellen
# Partitionierung mit fdisk
fdisk /dev/sdb
# n = neue Partition
# t = Typ auf 82 (Linux swap) setzen
# w = schreiben
# Oder mit parted
parted /dev/sdb
(parted) mkpart primary linux-swap 1MiB 4GiBSwap aktivieren
# Swap-Bereich einrichten
mkswap /dev/sdb1
# Aktivieren
swapon /dev/sdb1
# Status prüfen
swapon --showPermanent in fstab
# UUID ermitteln
blkid /dev/sdb1
# In /etc/fstab
UUID=xxx-xxx-xxx none swap sw 0 0
# Oder
/dev/sdb1 none swap sw 0 0Swap-Datei
Swap-Datei erstellen
# 4 GB Swap-Datei erstellen
sudo fallocate -l 4G /swapfile
# Oder mit dd (langsamer, aber sicherer)
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
# Berechtigungen setzen
sudo chmod 600 /swapfile
# Als Swap einrichten
sudo mkswap /swapfile
# Aktivieren
sudo swapon /swapfilePermanent machen
# In /etc/fstab
echo '/swapfile none swap sw 0 0' >> /etc/fstabSwap-Datei vergrößern
# 1. Deaktivieren
sudo swapoff /swapfile
# 2. Vergrößern
sudo fallocate -l 8G /swapfile
# Oder: sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
# 3. Neu einrichten
sudo mkswap /swapfile
# 4. Aktivieren
sudo swapon /swapfileSwap-Datei entfernen
# 1. Deaktivieren
sudo swapoff /swapfile
# 2. Aus fstab entfernen
# (manuell editieren)
# 3. Datei löschen
sudo rm /swapfileSwappiness
Swappiness verstehen
swappiness = 0: Swap nur bei absolutem Speichermangel
swappiness = 10: Minimales Swapping
swappiness = 60: Standard
swappiness = 100: Aggressives SwappingAktuellen Wert prüfen
cat /proc/sys/vm/swappiness
# Standard: 60Temporär ändern
sudo sysctl vm.swappiness=10Permanent ändern
# In /etc/sysctl.conf
echo 'vm.swappiness=10' >> /etc/sysctl.conf
# Anwenden
sudo sysctl -pEmpfohlene Werte
| System | swappiness | |--------|------------| | Desktop | 10-30 | | Server (viel RAM) | 10 | | Server (wenig RAM) | 60 | | Datenbank-Server | 1-10 | | SSD-System | 10 |
vfs_cache_pressure
Wert verstehen
vfs_cache_pressure kontrolliert, wie aggressiv
der Kernel Dentry und Inode Caches freigibt.
100 = Standard (fair balance)
< 100 = Caches bevorzugt behalten
> 100 = Caches aggressiver freigebenFür Desktop/SSD
# In /etc/sysctl.conf
vm.vfs_cache_pressure=50
# Anwenden
sysctl -pSwap-Priorität
Mehrere Swap-Bereiche
# Priorität bei swapon
swapon -p 100 /dev/sdb1 # Höhere Priorität
swapon -p 10 /swapfile # Niedrigere Priorität
# In fstab
/dev/sdb1 none swap sw,pri=100 0 0
/swapfile none swap sw,pri=10 0 0SSD vor HDD
# SSD-Swap zuerst nutzen
/dev/ssd_swap none swap sw,pri=100 0 0
/dev/hdd_swap none swap sw,pri=10 0 0Swap auf SSD
Empfehlungen
- Swappiness reduzieren (10-30)
- Nicht zu groß (RAM-Größe oder weniger)
- TRIM aktivieren wenn möglichDiscard aktivieren
# In fstab (wenn SSD TRIM unterstützt)
/swapfile none swap sw,discard 0 0zswap (Kompression)
zswap aktivieren
# Boot-Parameter
# In /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... zswap.enabled=1"
# Update grub
update-grub
rebootStatus prüfen
cat /sys/module/zswap/parameters/enabled
# Y = aktiviert
# Statistiken
grep -r . /sys/kernel/debug/zswap/zram (Alternative)
# zram-tools installieren
apt install zram-tools
# Konfiguration
# /etc/default/zramswap
ALGO=lz4
PERCENT=25
systemctl enable zramswap
systemctl start zramswap
# Status
zramctlMonitoring
Swap-Nutzung überwachen
# Kontinuierlich
watch -n 1 'free -h'
# vmstat (si=swap in, so=swap out)
vmstat 1
# procs -----------memory---------- ---swap-- -----io----
# r b swpd free buff cache si so bi bo
# Per-Prozess Swap
for f in /proc/*/status; do
awk '/VmSwap/{swap=$2} /Name/{name=$2} END{if(swap>0) print swap, name}' $f
done 2>/dev/null | sort -rn | head -20Hoher Swap = Problem?
- Gelegentliches Swapping: Normal
- Konstant hoher Swap: RAM zu knapp
- Swap I/O (si/so hoch): Performance-Problem
Lösungen:
1. Mehr RAM
2. Prozesse optimieren
3. OOM-Killer konfigurierenSwap und Hibernation
Swap für Hibernation
# Swap muss >= RAM sein
# Resume-Parameter in Grub
# UUID der Swap-Partition/Datei
blkid /dev/sdb1
# In /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=xxx-xxx"
# Für Swap-Datei zusätzlich:
# resume_offset ermitteln
filefrag -v /swapfile | awk '$1=="0:"{print $4}'
GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=xxx resume_offset=123456"
update-grubZusammenfassung
| Befehl | Funktion | |--------|----------| | swapon | Swap aktivieren | | swapoff | Swap deaktivieren | | mkswap | Swap-Bereich einrichten | | free -h | Speicher anzeigen | | swapon --show | Swap-Details |
| Parameter | Empfehlung | |-----------|------------| | swappiness | 10-30 für SSD/Desktop | | vfs_cache_pressure | 50-100 |
| Swap-Größe | Empfehlung | |------------|------------| | < 2 GB RAM | 2x RAM | | 2-8 GB RAM | = RAM | | 8-64 GB RAM | Min. 4 GB | | > 64 GB RAM | Min. 4 GB oder 0 |
| Datei | Funktion | |-------|----------| | /etc/fstab | Permanente Mounts | | /etc/sysctl.conf | Kernel-Parameter | | /proc/swaps | Aktive Swaps |
Fazit
Swap ist ein wichtiger Sicherheitspuffer für Linux-Systeme. Die richtige Größe hängt vom Einsatzzweck ab. Swappiness sollte für SSDs und Server reduziert werden. Swap-Dateien sind flexibler als Partitionen. zswap und zram bieten Kompression für bessere Performance. Regelmäßiges Monitoring verhindert Überraschungen.