Swap
Siehe auch
Linux lagert (swapped) inaktive Prozesse aus dem Hauptspeicher in seine Swap-Partitionen oder -Dateien aus. Sind die Prozesse wieder aktiv, werden sie aus dem Swap-Bereich zurück in den Speicher geladen. Sind mehrere Swap-Partitionen und/oder -Dateien vorhanden, füllt Linux zunächst den ersten Swap-Bereich komplett, bevor es nacheinander die anderen verwendet. In der Regel geschieht diese teure und langsame Aktion erst, wenn zu wenig Hauptspeicher vorhanden ist.
Linux kann auch ohne Swap arbeiten - falls kein Hauptspeicher zur Verfügung steht, fällt es in den „Kernel Panic“ Modus und startet seinen Out-of-Memory-Killer (OOM), bevor es den Kernel stoppt. Auf Swap-Space zu verzichten ist auf Embedded Systemen durchaus üblich, in der Praxis auf Servern jedoch nicht zu empfehlen.
Empfohlene Swap-Grössen:
RAM |
Swap Space |
---|---|
<= 2 GB |
2x RAM |
2..8 GB |
wie RAM |
8..64 GB |
>= 4 GB |
> 64 GB |
>= 4 GB |
Um festzustellen, wieviel Swap-Space zur Verfügung steht, und wie dieser ausgelastet ist, genügt folgendes Kommando:
grep Swap /proc/meminfo
# or
free -m
# or
top
Keine Panik: nur weil die Swap-Datei belegt ist, heisst das noch lange nicht, dass die Maschine auch aktiv swappt. Vieles davon kann auch gecached sein, d.h. dass aus Performance-Gründen Speicher für eine Anwendung im Hauptspeicher UND im Swap alloziert ist.
Wo liegt der Swap-Space?
swapon --summary
# or
cat /proc/swaps
Welcher Swap-Space wird mit welcher Priorität verwendet?
swapon --show
Wieviel Cache wird im Swap-Space verwendet?
grep SwapCached /proc/meminfo
Ab wann swappt die Maschine / ab wann wird Swap-Space genutzt? Der Kernel kennt dafür den Begriff „Swappiness“.
cat /proc/sys/vm/swappiness
Ein Wert „30“ bedeutet, dass ab 30% freiem Memory und weniger geswappt wird. Ein Wert von „0“ bedeutet, unter allen Umständen Swap-Space zu vermeiden, was meist auf Embedded Systeme konfiguriert wird.
So setzt man die Swapiness auf 10:
vm.swappiness = 10
sysctl -p
Um festzustellen, ob die Maschine aktiv Hauptspeicher auf die Festplatte auslagert, kann das Kommando
vmstat 1
aufgerufen werden. Die Spalten „si“ (Swap in = Disk to RAM) und „so“ (Swap out = RAM to Disk) geben darüber Auskunft.
Welcher Prozess verwendet Swap-Space?
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less
Um aktuell verwendeten Swap-Space wieder zurück ins RAM zu kopieren, kann man den Swap-Space de- und wieder aktivieren. Aber Vorsicht: man sollte mit vmstat 1
tunlichst darauf achten, dass gerade nicht geswappt wird - sonst wird der OOM aktiv:
cat /proc/meminfo | grep -i swap
swapoff --verbose --all && swapon --verbose --all
cat /proc/meminfo | grep -i swap
Geduld: swapoff
braucht auf manchen Systemen etliche Minuten, falls beispielsweise viel Cached Swap-Space allokiert wurde (dieser wird bei swapoff
in homöopathischen Dosen freigegeben). Ein swappoff
lastet zudem einen CPU-Core zu 100% aus. Auf einem KVM-Server dauerte der Vorgang bei knapp 4 GB SwapCached, 400 MB SwapFree und 16 GB SwapTotal über 2 Stunden, die Maschine blieb aber nutz- und ansprechbar.
Swap-Partition vergrössern
LVM-Name der bestehenden Swap-Partition ermitteln:
blkid | grep swap
df -hT
Im Beispiel heisst die Partition /dev/mapper/rl-swap
.
VG=rl; LV=swap
swapoff --verbose /dev/mapper/$VG-$LV
lvresize /dev/mapper/$VG-$LV --size +4G
Bei der Erstellung auf Bad Blocks prüfen.
mkswap --check /dev/mapper/$VG-$LV
swapon --verbose --all
Swap-Partition hinzufügen
Um eine Swap-Partition zu erstellen, legt man beispielsweise mit
fdisk
eine Partition vom Typ „82“ (= Linux swap / Solaris) an.
Danach wird die Swap-Partition aktiviert, im Beispiel auf /dev/vdc3
:
mkswap --check /dev/vdc3
swapon /dev/vdc3
Die Swap-Partition ist erstellt und mit letztem Befehl sofort aktiv
geschaltet worden. Jetzt dauerhaft in die /etc/fstab
eintragen:
blkid /dev/vdc3
# higher number means higher prio
UUID="ab-...-OmKggh" swap swap defaults 0 0
UUID="gh-...-OmKggh" swap swap pri=10 0 0
UUID="xy-...-OmKggh" swap swap pri=20 0 0
Eine Überprüfung mit swapon --summary
zeigt, wo welcher Swap-Space
in welchem Umfang verwendet wird.
Swap-Datei hinzufügen
Prinzipiell spielt es keine Rolle, ob für den Swap-Space eine Partition oder eine Datei genommen wird. Daher liesse sich mit
dd if=/dev/zero of=/swapfile bs=1G count=4 status=progress
# the above command needs round about 10 seconds
chmod 0600 /swapfile
eine 4 GB grosse, mit Nullen gefüllte Datei anlegen, die sich mit mkswap
und swapon
genauso gut als Swap-Space eignet.
mkswap /swapfile
sync
swapon /swapfile
/swapfile swap swap defaults 0 0
Tipp
Fehlermeldung swapon failed: Device or resource busy
? Das Device ist nicht busy, die Datei ist einfach noch nicht da und kann deswegen nicht als Swap-Space aktiviert werden. In diesem Fall hilft der Aufruf von sync
vor swapon
, um die mit mkswap
erzeugte Datei auch wirklich auf die Festplatte zu schreiben.
Swap-Datei entfernen
swapoff --verbose /swapfile
rm -f /swapfile
Built on 2024-11-18