Ein SWAP-File unter Ubuntu erstellen
Was ist Swap?
Egal ob schon in die Jahre gekommen oder top modern. Unsere IT besteht meistens aus immer den gleichen Kernkomponenten: CPUs (Central Processing Units), RAM (Random Access Memory) und Datenträgern wie beispielsweise SSDs (Solid State Drives) oder HDDs (Hard Disk Drives).
Die Idee ist, die Daten auf dem vergleichsweise langsamen, aber großen und stetigen Speicher abzulegen. Öffnet man ein Programm, wird dieses in den RAM geladen, da dieser um einiges schneller ist.
Oftmals reicht der verfügbare RAM jedoch nicht aus, beispielsweise, wenn zu viele Programme geöffnet sind oder eines mehr RAM benötigt als physisch verfügbar sind. Normalerweise würde das Programm durch einen Fehler beendet werden. Das nennt man dann Out-Of-Memory. Um dies zu vermeiden und gleichzeitig die Performance des Servers zu erhöhen, besteht die Möglichkeit ab einem gewissen Level an belegtem RAM die Daten auf den Datenträger (z.B. die SSD oder HDD) auszulagern.
Damit die Performance nicht allzu sehr darunter leidet, werden hier die Daten quasi benotet. Weniger frequentierte und ältere Dateien werden bevorzugt ausgelagert.
Nun können die Daten jedoch nicht einfach auf den Datenträger geschrieben werden, da sonst ein Datenverlust drohen könnte. Daher wird vorher auf dem Datenträger ein gewisser Teil reserviert.
Unter Windows werden hierfür Auslagerungsdateien erstellt, deren Größe und Lage in den Systemeinstellungen festgelegt werden können.
Unter Linux (in diesem Beispiel Ubuntu) heißt das ganze SWAP, wobei zwischen zwei Varianten unterschieden werden kann.
Zum einen kann wie bei Windows ein SWAP-File angelegt werden, welches irgendwo ins Dateisystem hinterlegt oder direkt eine ganz eigene Partition wird.
Ich zeige dir, wie du on-the-fly ein Ubuntu SWAP-File anlegst, um dann, wenn du es brauchst, deinen RAM zu entlasten.
Bei gridscale hast du die Möglichkeit, im laufenden Betrieb im Server weiteren RAM zur Verfügung zu stellen. Das ist grundsätzlich performanter. Dennoch kann ein SWAP-File nicht schaden, da ein OOM-Error (Out-Of-Memory Error) meistens dann passiert, wenn du nicht gerade an der Konsole bist und die Auslastung überwachst.
Bist du bereit zu starten?
Oder hast du noch Fragen? Lasse dir jetzt dein Konto erstellen oder dich in einem persönlichen Gespräch beraten.
Ubuntu SWAP-File erstellen
Hierzu gibt es zwei gängige Methoden. Da die eine aber relativ langsam ist und nicht wirklich Vorteile bietet, zeige ich dir nur die einfache, schnellere Variante.
Zuerst ist es empfehlenswert zu überprüfen, wie viel Speicherplatz auf dem Datenträger noch verfügbar ist. Dazu einfach den folgenden Befehl in die Konsole eingeben:
root@testserver:/# df -h
Die Ausgabe sollte dann ungefähr so aussehen:
Für uns relevant ist der freie Speicherplatz auf der Partition /dev/sda1. In diesem Beispiel sind noch 8,4 GB frei. Als nächstes erstellst du ein SWAP-File im Root Verzeichnis deines Servers. Die Größe des SWAP-Files kannst du selbst festlegen, je nachdem wie viel du brauchst. In diesem Beispiel nehme ich 4 GB. Zum Erstellen nutze ich das Fallocate Programm. Um also ein 4 GB SWAP-File zu erstellen gebe folgenden Befehl ein:
root@testserver:/# sudo fallocate -l G /swapfile
Fallocate erstellt lediglich eine Datei und reserviert auf der Platte die gewünschte Länge, sie schreibt allerdings keine Bits, keine Daten auf den Datenträger, daher geht die Erstellung auch so schnell. Zur Erklärung des Befehls: der Parameter -l (length) legt die gewünschte Größe der Datei an, die dann auf den dahinter festgelegten Pfad erstellt wird, in dem Fall ins Root Verzeichnis (/) und die Datei soll “swapfile ”heißen. Wie du deine Datei nennst und wie viel GB du festlegst liegt ganz bei dir.
Ob das Erstellen erfolgreich war, kannst du ganz einfach überprüfen indem du folgenden Befehl ausführst:
root@testserver:/# ls -lh /swapfile
Die Ausgabe sollte dann ungefähr so aussehen:
Vor dem Datum der Erstellung siehst du die Dateigröße. Falls die Dateigröße nicht dem entsprechen sollte, was du eingeben hast, lies dir noch einmal genau die Ausgabe des vorletzten Befehls durch, eventuell ist es zu einem Fehler gekommen.
Als nächstes legst du mit dem Befehl
root@testserver:/# sudo chmod 600 /swapfile
die Berechtigungen der Datei auf 600.
Mit dem folgenden Befehl kannst du überprüfen, ob die Berechtigungen erfolgreich geändert wurden.
root@testserver:/# ls -lh
Die Ausgabe sollte jetzt wie folgt aussehen:
Im nächsten Schritt wird das Swapfile als dieses definiert oder aktiviert, denn bisher ist es einfach nur ein 4 GB großer Platzhalter.
root@testserver:/# sudo mkswap /swapfile
Jetzt muss das SWAP-File als solches noch aktiviert werden. Nutze die Gelegenheit und schau dir vorher noch mal an, wie deine jetzige Konfiguration aussieht.
sudo swapon -s
Das SWAP File aktivierst du mit folgendem Befehl:
sudo swapon /swapfile
Um sicher zu gehen, dass alles geklappt hat, kannst du dir mit folgendem Befehl alle aktiven Swaps anzeigen lassen.
root@testserver:/# sudo swapon -s
Die Ausgabe sieht im Idealfall dann so aus:
Wenn du dir jetzt noch einmal deinen RAM anzeigen lässt, ist auch das neue Swapfile mit aufgelistet:
root@testserver:/# free -m
So weit so gut. Allerdings gibt es noch ein Problem, dass es zu beheben gilt. Das Swapfile ist beim nächsten Reboot wieder deaktiviert.
Ubuntu Swap-File permanent einbinden
Um das Swapfile permanent einzubinden wird es in fstab hinterlegt. Dazu einfach mit dem Texteditor deiner Wahl folgende Zeile einfügen. Ich verwende dafür Nano.
root@testserver:/# sudo nano /etc/fstab
/swapfile none swap sw 0 0
Anschließend noch speichern und beenden. Jetzt wird bei jedem Start das Swapfile automatisch eingebunden.
Die Swappiness
Wie eingangs bereits erwähnt, ist der SWAP nicht so performant wie der RAM. Damit das System nicht anfängt, alles ausschließlich in das SWAP-File zu übertragen, kann man den Parameter “swappiness ”etwas senken. Dieser bestimmt wie oft das System Daten vom RAM in das File überträgt. Dazu legst du einfach den Prozentwert in Ganzzahlen fest. 0 ist hierbei “benutze das SWAP-File wenn es wirklich, wirklich, wirklich nicht anders geht ”und 100 “lass meinen RAM leer und pack alles in den SWAP ”. Beachte hierbei, dass die falsche Einstellung schnell die Performance deines Systems drastisch reduzieren kann. Je nachdem wie du deinen Server nutzt, kann es aber durchaus Sinn machen den RAM zu schonen.
Um den aktuellen Wert auszulesen kannst du folgenden Befehl nutzen:
root@testserver:/# cat /proc/sys/vm/swappiness
Für einen Desktop PC ist 60 ein ganz guter Wert, für einen Server sollte er allerdings etwas niedriger sein. Mit folgendem Befehl kannst du den Wert auf 10 senken:
root@testserver:/# sysctl vm.swappiness=10
Auch hier ist der Wert nur temporär. Mit dem nächsten Neustart liegt er wieder beim Standartwert. Um die Swappiness permanent festzulegen wird wieder ein Stückchen Code an eine Datei gehängt, in diesem Fall in die sysctl.conf.
root@testserver:/# sudo nano /etc/sysctl.conf
Ans Ende des Dokuments einfach folgende Zeit hinzufügen:
vm.swappiness=10
Speichere und beende Nano wenn du fertig bist.
Ein weiterer Wert, den man bei der Gelegenheit auch anpassen kann, ist der vfs_cache_pressure. Jede Datei, die irgendwo gespeichert wird, ist verknüpft mit sogenannten Meta-Daten, diese können zum Beispiel beinhalten, wann die Datei erstellt wurde, wer sie erstellt hat, wann sie zuletzt geöffnet wurde aber auch zum Beispiel wie groß die Datei ist. Linux Systeme speichern diese Daten in sogenannten Inodes, die wiederum Superblocks untergeordnet sind. Inodes und Verzeichniseinträge sind also für jeden einzelnen Vorgang nötig, weshalb es Sinn macht, diese zu cachen. Das Problem ist, dass Linux diesen Cache ziemlich schnell wieder löscht, erst recht wenn der RAM langsam ausgeht. Daher kann man hier den Cache Pressure verminden, also den Druck auf das System den Cache zu löschen. Auch hier sind die Angaben wieder in Prozent, 1-100. Um den aktuellen Wert auszulesen kannst du folgenden Befehl nutzen:
root@testserver:/# cat /proc/sys/vm/vfs_cache_pressure
Wenn du den Wert auf 50 verringerst, wird der Cache weniger häufig erneuert. Dadurch sind die Ressourcen wieder anderweitig nutzbar. Auch hier gilt wieder, dass der Wert nur temporär ist. In der systemctl.conf, in der du vorhin schon die Swappiness festgelegt hast, fügst du jetzt noch folgenden Wert hinzu:
root@testserver:/# sudo nano /etc/sysctl.conf
Einfach folgende Zeit am Ende des Dokumentss einfügen.
vm.vfs_cache_pressure=10
Anschließend wieder speichern und beenden.
Weitere Befehle zum Thema SWAP
Natürlich kannst du das SWAP-File auch wieder löschen, hierzu solltest du es allerdings erst deaktivieren, um Datenverlust vorzubeugen.
root@testserver:/# sudo swapoff /swapfile
Das Löschen startet wie folgt.
root@testserver:/# rm -r /swapfile
Dies kann nützlich sein, wenn der Speicherplatz auf dem Datenträger knapp wird. Sollte dir das bei gridscale einmal passieren, kannst du im laufenden Betrieb den Speicher deines Storages erhöhen.
Fazit
Alles in allem ist ein Swapfile schon eine gute Sache, wenn dein System nicht ausreichend RAM hat. Du solltest ein Swapfile immer in Betracht ziehen, wenn du OOM-Erros bekommst. SWAP-Files sind allerdings nie eine langfristige Alternative zu mehr RAM, sie können dir im Notfall jedoch schon mal den Tag retten.
Unter gridscale.io kannst du ganz einfach einen Server erstellen und es selber einmal ausprobieren.
Mehr Informationen darüber wie gridscale funktioniert findest du in unserem Artikel How to gridscale.