Eine frühere Version dieses Tutorials wurde von Justin Ellingwood
- Einführung
- Was ist Swap?
- Schritt 1 – Überprüfen des Systems auf Swap-Informationen
- Schritt 2 – Überprüfen des verfügbaren Speicherplatzes auf der Festplattenpartition
- Schritt 3 – Erstellen einer Swap-Datei
- Schritt 4 – Aktivieren der Auslagerungsdatei
- Schritt 5 – Die Auslagerungsdatei dauerhaft machen
- Schritt 6 – Abstimmen der Swap-Einstellungen
- Anpassen der Swappiness-Eigenschaft
- Anpassen der Cache-Druck-Einstellung
- Schlussfolgerung
Einführung
Eine der einfachsten Methoden, um sich vor Out-of-Memory-Fehlern in Anwendungen zu schützen, ist das Hinzufügen von Swap Space zu Ihrem Server. In dieser Anleitung wird beschrieben, wie man eine Swap-Datei zu einem Ubuntu 18.04-Server hinzufügt.
Warnung: Obwohl Swap im Allgemeinen für Systeme mit traditionellen Spinning-Festplatten empfohlen wird, kann die Verwendung von Swap mit SSDs im Laufe der Zeit zu Problemen mit Hardwaredegradation führen. Aus diesem Grund raten wir davon ab, Swap auf DigitalOcean oder anderen Anbietern, die SSD-Speicher verwenden, zu aktivieren. Dies kann die Zuverlässigkeit der zugrunde liegenden Hardware für Sie und Ihre Nachbarn beeinträchtigen. Dieser Leitfaden dient als Referenz für Benutzer, die möglicherweise anderswo Spinning-Disk-Systeme haben.
Wenn Sie die Leistung Ihres Servers auf DigitalOcean verbessern möchten, empfehlen wir ein Upgrade Ihres Droplets. Dies führt zu besseren Ergebnissen im Allgemeinen und verringert die Wahrscheinlichkeit, zu Hardwareproblemen beizutragen, die Ihren Service beeinträchtigen können.
Was ist Swap?
Swap ist ein Bereich auf einer Festplatte, der als Ort bestimmt wurde, an dem das Betriebssystem Daten vorübergehend speichern kann, die es nicht mehr im RAM halten kann. Im Grunde genommen können Sie damit die Menge an Informationen, die Ihr Server in seinem Arbeitsspeicher halten kann, erhöhen, allerdings mit einigen Einschränkungen. Der Auslagerungsspeicher auf der Festplatte wird vor allem dann verwendet, wenn im Arbeitsspeicher nicht mehr genügend Platz für die verwendeten Anwendungsdaten vorhanden ist.
Die auf die Festplatte geschriebenen Informationen sind deutlich langsamer als die im Arbeitsspeicher gehaltenen Informationen, aber das Betriebssystem zieht es vor, die laufenden Anwendungsdaten im Arbeitsspeicher zu halten und den Auslagerungsspeicher für die älteren Daten zu verwenden. Insgesamt kann Swap-Speicher als Ausweichmöglichkeit für den Fall dienen, dass der RAM-Speicher des Systems erschöpft ist, was ein gutes Sicherheitsnetz für den Fall sein kann, dass der Speicher nicht ausreicht.
Schritt 1 – Überprüfen des Systems auf Swap-Informationen
Bevor wir beginnen, können wir überprüfen, ob das System bereits über Swap-Speicher verfügt. Es ist möglich, mehrere Swap-Dateien oder Swap-Partitionen zu haben, aber im Allgemeinen sollte eine ausreichen.
Wir können überprüfen, ob das System über einen konfigurierten Swap-Speicher verfügt, indem wir Folgendes eingeben:
- sudo swapon --show
Wenn Sie keine Ausgabe erhalten, bedeutet dies, dass Ihr System derzeit keinen Swap-Speicher zur Verfügung hat.
Sie können mit dem Dienstprogramm free
überprüfen, dass kein aktiver Swap vorhanden ist:
- free -h
Output total used free shared buff/cache availableMem: 985M 84M 222M 680K 678M 721MSwap: 0B 0B 0B
Wie Sie in der Swap-Zeile der Ausgabe sehen können, ist kein Swap auf dem System aktiv.
Schritt 2 – Überprüfen des verfügbaren Speicherplatzes auf der Festplattenpartition
Bevor wir unsere Swap-Datei erstellen, überprüfen wir die aktuelle Festplattennutzung, um sicherzustellen, dass wir genügend Platz haben. Geben Sie dazu Folgendes ein:
- df -h
OutputFilesystem Size Used Avail Use% Mounted onudev 481M 0 481M 0% /devtmpfs 99M 656K 98M 1% /run/dev/vda1 25G 1.4G 23G 6% /tmpfs 493M 0 493M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 493M 0 493M 0% /sys/fs/cgroup/dev/vda15 105M 3.4M 102M 4% /boot/efitmpfs 99M 0 99M 0% /run/user/1000
Das Gerät mit /
in der Spalte Mounted on
ist in diesem Fall unsere Festplatte. In diesem Beispiel haben wir reichlich Platz zur Verfügung (nur 1,4G belegt). Ihre Nutzung wird wahrscheinlich anders sein.
Obgleich es viele Meinungen über die angemessene Größe eines Swap Space gibt, hängt dies wirklich von Ihren persönlichen Vorlieben und den Anforderungen Ihrer Anwendung ab. Im Allgemeinen ist eine Größe, die der Größe des Arbeitsspeichers auf Ihrem System entspricht oder doppelt so groß ist, ein guter Ausgangspunkt. Eine weitere gute Faustregel ist, dass alles, was über 4G Swap hinausgeht, wahrscheinlich unnötig ist, wenn Sie es nur als RAM-Reserve verwenden.
Schritt 3 – Erstellen einer Swap-Datei
Nun, da wir unseren verfügbaren Festplattenspeicherplatz kennen, können wir eine Swap-Datei in unserem Dateisystem erstellen. Wir werden eine Datei der gewünschten Auslagerungsgröße mit dem Namen swapfile
in unserem Root-Verzeichnis (/) anlegen.
Die beste Möglichkeit, eine Auslagerungsdatei zu erstellen, ist das Programm fallocate
. Mit diesem Befehl wird sofort eine Datei der angegebenen Größe erstellt.
Da der Server in unserem Beispiel über 1 GB RAM verfügt, wird in dieser Anleitung eine 1 GB große Datei erstellt. Passen Sie dies an die Anforderungen Ihres eigenen Servers an:
- sudo fallocate -l 1G /swapfile
Wir können überprüfen, ob die richtige Menge an Speicherplatz reserviert wurde, indem wir Folgendes eingeben:
- ls -lh /swapfile
- -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
Unsere Datei wurde mit der richtigen Menge an Speicherplatz erstellt.
Schritt 4 – Aktivieren der Auslagerungsdatei
Nun, da wir eine Datei mit der richtigen Größe zur Verfügung haben, müssen wir diese tatsächlich in Auslagerungsspeicher umwandeln.
Zuerst müssen wir die Berechtigungen der Datei sperren, so dass nur Benutzer mit Root-Rechten den Inhalt lesen können. Dadurch wird verhindert, dass normale Benutzer auf die Datei zugreifen können, was erhebliche Auswirkungen auf die Sicherheit hätte.
Machen Sie die Datei nur für Root zugänglich, indem Sie Folgendes eingeben:
- sudo chmod 600 /swapfile
Überprüfen Sie die Änderung der Berechtigungen, indem Sie Folgendes eingeben:
- ls -lh /swapfile
Output -rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Wie Sie sehen können, hat nur der Root-Benutzer die Lese- und Schreibflags aktiviert.
Wir können nun die Datei als Auslagerungsspeicher markieren, indem wir Folgendes eingeben:
- sudo mkswap /swapfile
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
Nach der Markierung der Datei können wir die Auslagerungsdatei aktivieren, so dass unser System sie nutzen kann:
- sudo swapon /swapfile
Überprüfen Sie, ob die Auslagerungsdatei verfügbar ist, indem Sie Folgendes eingeben:
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO/swapfile file 1024M 0B -2
Wir können die Ausgabe des Dienstprogramms free
noch einmal überprüfen, um unsere Ergebnisse zu bestätigen:
- free -h
Output total used free shared buff/cache availableMem: 985M 84M 220M 680K 680M 722MSwap: 1.0G 0B 1.0G
Unser Swap wurde erfolgreich eingerichtet und unser Betriebssystem wird beginnen, ihn bei Bedarf zu nutzen.
Schritt 5 – Die Auslagerungsdatei dauerhaft machen
Unsere jüngsten Änderungen haben die Auslagerungsdatei für die aktuelle Sitzung aktiviert. Wenn wir jedoch einen Neustart durchführen, behält der Server die Swap-Einstellungen nicht automatisch bei. Wir können dies ändern, indem wir die Auslagerungsdatei zu unserer /etc/fstab
-Datei hinzufügen.
Sichern Sie die /etc/fstab
-Datei für den Fall, dass etwas schief geht:
- sudo cp /etc/fstab /etc/fstab.bak
Fügen Sie die Informationen zur Auslagerungsdatei am Ende Ihrer /etc/fstab
-Datei ein, indem Sie Folgendes eingeben:
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Als Nächstes werden wir einige Einstellungen überprüfen, die wir aktualisieren können, um unseren Auslagerungsspeicher zu optimieren.
Schritt 6 – Abstimmen der Swap-Einstellungen
Es gibt einige Optionen, die Sie konfigurieren können und die sich auf die Leistung Ihres Systems im Umgang mit dem Swap auswirken.
Anpassen der Swappiness-Eigenschaft
Der swappiness
Parameter konfiguriert, wie oft Ihr System Daten aus dem RAM in den Swap-Bereich auslagert. Dies ist ein Wert zwischen 0 und 100, der einen Prozentsatz darstellt.
Bei Werten nahe Null wird der Kernel keine Daten auf die Festplatte auslagern, wenn es nicht absolut notwendig ist. Denken Sie daran, dass Interaktionen mit der Auslagerungsdatei insofern „teuer“ sind, als sie viel länger dauern als Interaktionen mit dem Arbeitsspeicher, und sie können eine erhebliche Leistungsminderung verursachen. Wenn Sie dem System sagen, dass es sich nicht so sehr auf die Auslagerungsdatei verlassen soll, wird Ihr System im Allgemeinen schneller.
Werte, die näher an 100 liegen, versuchen, mehr Daten in die Auslagerungsdatei zu verschieben, um mehr RAM-Speicherplatz frei zu halten. Je nach dem Speicherprofil Ihrer Anwendungen oder der Verwendung Ihres Servers kann dies in manchen Fällen besser sein.
Den aktuellen Swappiness-Wert können Sie durch Eingabe von:
- cat /proc/sys/vm/swappiness
Output60
Für einen Desktop ist eine Swappiness-Einstellung von 60 kein schlechter Wert. Für einen Server sollten Sie den Wert eher auf 0 setzen.
Wir können den Swappiness-Wert mit dem Befehl sysctl
auf einen anderen Wert setzen.
Um den Swappiness-Wert beispielsweise auf 10 zu setzen, können wir Folgendes eingeben:
- sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10
Diese Einstellung bleibt bis zum nächsten Neustart erhalten. Wir können diesen Wert automatisch beim Neustart setzen, indem wir die Zeile zu unserer /etc/sysctl.conf
-Datei hinzufügen:
- sudo nano /etc/sysctl.conf
Unten können Sie hinzufügen:
vm.swappiness=10
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Anpassen der Cache-Druck-Einstellung
Ein weiterer verwandter Wert, den Sie vielleicht ändern möchten, ist der vfs_cache_pressure
. Diese Einstellung legt fest, wie stark das System Inode- und Dentry-Informationen gegenüber anderen Daten in den Cache einspeichert.
Grundsätzlich handelt es sich dabei um Zugriffsdaten über das Dateisystem. Diese Daten sind in der Regel sehr kostspielig und werden sehr häufig abgefragt, so dass es für Ihr System eine gute Sache ist, sie zu cachen. Sie können den aktuellen Wert sehen, indem Sie das proc
-Dateisystem erneut abfragen:
- cat /proc/sys/vm/vfs_cache_pressure
Output100
Wie es derzeit konfiguriert ist, entfernt unser System die Inode-Informationen zu schnell aus dem Cache. Wir können dies auf eine konservativere Einstellung wie 50 setzen, indem wir Folgendes eingeben:
- sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50
Auch dies gilt nur für unsere aktuelle Sitzung. Wir können dies ändern, indem wir es zu unserer Konfigurationsdatei hinzufügen, wie wir es mit unserer Swappiness-Einstellung getan haben:
- sudo nano /etc/sysctl.conf
Fügen Sie am Ende die Zeile hinzu, die Ihren neuen Wert angibt:
vm.vfs_cache_pressure=50
Speichern Sie die Datei und schließen Sie sie, wenn Sie fertig sind.
Schlussfolgerung
Wenn Sie die Schritte in dieser Anleitung befolgen, erhalten Sie etwas Spielraum in Fällen, die andernfalls zu Out-of-Memory-Ausnahmen führen würden. Swap Space kann unglaublich nützlich sein, um einige dieser häufigen Probleme zu vermeiden.
Wenn Sie auf OOM-Fehler (out of memory) stoßen, oder wenn Sie feststellen, dass Ihr System nicht in der Lage ist, die von Ihnen benötigten Anwendungen zu nutzen, ist die beste Lösung, Ihre Anwendungskonfigurationen zu optimieren oder Ihren Server aufzurüsten.