Einführung
Eine Möglichkeit, sich gegen Out-of-Memory-Fehler in Anwendungen zu schützen, besteht darin, Ihrem Server etwas Swap-Speicher hinzuzufügen. In diesem Leitfaden werden wir erläutern, wie Sie einer Ubuntu 22.04-Server eine Swap-Datei hinzufügen können.
Was ist Swap?
Swap ist ein Teil des Festplattenspeichers, der vom Betriebssystem vorübergehend reserviert wurde, um Daten zu speichern, die es nicht mehr im RAM halten kann. Dies ermöglicht es Ihnen, die Menge an Informationen zu erhöhen, die Ihr Server im Arbeitsspeicher behalten kann, allerdings mit einigen Einschränkungen. Der Swap-Speicher auf der Festplatte wird hauptsächlich verwendet, wenn im RAM nicht mehr genügend Platz vorhanden ist, um die aktuell verwendeten Anwendungsdaten zu speichern.
Die auf die Festplatte geschriebenen Informationen werden erheblich langsamer sein als die im RAM gehaltenen Informationen, aber das Betriebssystem wird bevorzugen, laufende Anwendungsdaten im Speicher zu behalten und Swap für ältere Daten zu verwenden. Insgesamt kann das Vorhandensein von Swap-Speicher als Rückfalloption für den Fall, dass der RAM Ihres Systems erschöpft ist, ein guter Schutz gegen Out-of-Memory-Ausnahmen auf Systemen mit verfügbarem Nicht-SSD-Speicher sein.
Schritt 1 – Überprüfen des Systems auf Swap-Informationen
Bevor wir beginnen, können wir überprüfen, ob das System bereits über einige 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 sehen, ob das System über konfigurierten Swap verfügt, indem wir Folgendes eingeben:
Wenn Sie keine Ausgabe erhalten, bedeutet dies, dass Ihr System derzeit keinen verfügbaren Swap-Speicher hat.
Sie können überprüfen, ob kein aktiver Swap vorhanden ist, indem Sie das Dienstprogramm free
verwenden:
Output total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
Wie Sie in der Ausgabe unter der Swap-Zeile 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 unsere aktuelle Festplattenbelegung, um sicherzustellen, dass wir genügend Platz haben. Tun Sie dies, indem Sie Folgendes eingeben:
OutputFilesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 932K 98M 1% /run
/dev/vda1 25G 1.4G 23G 7% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
/dev/loop0 55M 55M 0 100% /snap/core18/1705
/dev/loop1 69M 69M 0 100% /snap/lxd/14804
/dev/loop2 28M 28M 0 100% /snap/snapd/7264
tmpfs 99M 0 99M 0% /run/user/1000
Das Gerät mit /
in der Gemountet auf
-Spalte ist in diesem Fall unsere Festplatte. Wir haben in diesem Beispiel viel Platz zur Verfügung (nur 1,4G verwendet). Ihre Nutzung wird wahrscheinlich anders sein.
Obwohl es viele Meinungen über die geeignete Größe eines Auslagerungsbereichs gibt, hängt es wirklich von Ihren persönlichen Vorlieben und den Anforderungen Ihrer Anwendung ab. Im Allgemeinen ist eine Menge gleich oder doppelt so groß wie der RAM-Speicher auf Ihrem System ein guter Ausgangspunkt. Eine weitere Faustregel besagt, dass alles über 4G an Auslagerung wahrscheinlich unnötig ist, wenn Sie es nur als RAM-Ersatz verwenden.
Schritt 3 – Erstellen einer Auslagerungsdatei
Jetzt, da wir unseren verfügbaren Festplattenspeicher kennen, können wir eine Auslagerungsdatei auf unserem Dateisystem erstellen. Wir werden eine Datei der gewünschten Größe namens swapfile
in unserem Stammverzeichnis (/
) zuweisen.
Die beste Methode zur Erstellung einer Auslagerungsdatei ist mit dem Programm fallocate
. Dieser Befehl erstellt sofort eine Datei der angegebenen Größe.
Da der Server in unserem Beispiel 1G RAM hat, werden wir in diesem Leitfaden eine 1G Datei erstellen. Passen Sie dies an die Bedürfnisse Ihres eigenen Servers an:
Wir können überprüfen, ob die richtige Menge an Speicherplatz reserviert wurde, indem wir Folgendes eingeben:
Unsere Datei wurde mit der richtigen Menge an reserviertem Speicherplatz erstellt.
Schritt 4 – Aktivieren der Auslagerungsdatei
Nun, da wir eine Datei 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 so einschränken, dass nur Benutzer mit Root-Berechtigungen den Inhalt lesen können. Dadurch wird verhindert, dass normale Benutzer auf die Datei zugreifen können, was erhebliche Sicherheitsimplikationen hätte.
Erstellen Sie die Datei nur zugänglich für Root, indem Sie Folgendes eingeben:
Überprüfen Sie die Berechtigungsänderung, indem Sie Folgendes eingeben:
Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Wie Sie sehen können, hat nur der Benutzer Root die Lese- und Schreibflags aktiviert.
Wir können die Datei nun als Auslagerungsspeicher markieren, indem wir Folgendes eingeben:
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
Nachdem die Datei markiert wurde, können wir den Auslagerungsspeicher aktivieren, sodass unser System ihn verwenden kann:
Überprüfen Sie, ob der Auslagerungsspeicher verfügbar ist, indem Sie Folgendes eingeben:
OutputNAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
Wir können erneut die Ausgabe des Dienstprogramms free
überprüfen, um unsere Ergebnisse zu bestätigen:
Output total used free shared buff/cache available
Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi
Swap: 1.0Gi 0B 1.0Gi
Unser Auslagerungsspeicher wurde erfolgreich eingerichtet, und unser Betriebssystem wird beginnen, ihn bei Bedarf zu verwenden.
Schritt 5 – Den Auslagerungsspeicher dauerhaft machen
Unsere jüngsten Änderungen haben die Auslagerungsdatei für die aktuelle Sitzung aktiviert. Wenn wir jedoch neu starten, behält der Server die Auslagerungseinstellungen nicht automatisch bei. Wir können dies ändern, indem wir die Auslagerungsdatei zu unserer /etc/fstab
-Datei hinzufügen.
Erstellen Sie eine Sicherungskopie der Datei /etc/fstab
, falls etwas schief geht:
Fügen Sie die Swap-Datei-Informationen am Ende Ihrer /etc/fstab
-Datei hinzu, indem Sie Folgendes eingeben:
Anschließend werden einige Einstellungen überprüft, die wir aktualisieren können, um unseren Swap-Speicher anzupassen.
Schritt 6 – Anpassen Ihrer Swap-Einstellungen
Es gibt einige Optionen, die Sie konfigurieren können, die sich auf die Leistung Ihres Systems beim Umgang mit Swap auswirken werden.
Anpassen der Swappiness-Eigenschaft
Der swappiness
-Parameter konfiguriert, wie oft Ihr System Daten von RAM in den Swap-Speicher verschiebt. Dies ist ein Wert zwischen 0 und 100, der einen Prozentsatz darstellt.
Mit Werten nahe Null wird der Kernel Daten nur dann auf die Festplatte auslagern, wenn es unbedingt erforderlich ist. Denken Sie daran, dass Interaktionen mit der Swap-Datei „teuer“ sind, da sie deutlich länger dauern als Interaktionen mit RAM und sie eine erhebliche Leistungsreduzierung verursachen können. Dem System mitzuteilen, dass es sich nicht stark auf den Swap verlassen soll, macht Ihr System im Allgemeinen schneller.
Werte, die näher an 100 liegen, versuchen mehr Daten in den Swap zu setzen, um mehr RAM-Speicherplatz frei zu halten. Abhängig vom Speicherprofil Ihrer Anwendungen oder davon, wofür Sie Ihren Server verwenden, kann dies in einigen Fällen besser sein.
Wir können den aktuellen Swappiness-Wert anzeigen, indem wir Folgendes eingeben:
Output60
Für einen Desktop ist ein Swappiness-Wert von 60 kein schlechter Wert. Für einen Server möchten Sie ihn möglicherweise näher an 0 verschieben.
Wir können den Swappiness-Wert auf einen anderen Wert setzen, indem wir das sysctl
-Befehl verwenden.
Zum Beispiel könnten wir den Swappiness-Wert auf 10 setzen, indem wir Folgendes eingeben:
Outputvm.swappiness = 10
Diese Einstellung bleibt bis zum nächsten Neustart erhalten. Wir können diesen Wert automatisch beim Neustart festlegen, indem wir die Zeile zu unserer /etc/sysctl.conf
-Datei hinzufügen:
Am Ende können Sie Folgendes hinzufügen:
vm.swappiness=10
Speichern Sie die Datei und schließen Sie sie, wenn Sie fertig sind.
Anpassen der Cache-Druckeinstellung
Ein weiterer verwandter Wert, den Sie möglicherweise ändern möchten, ist der vfs_cache_pressure
. Diese Einstellung konfiguriert, wie viel das System dazu neigt, Inode– und Dentry-Informationen gegenüber anderen Daten zu zwischenspeichern.
Grundsätzlich handelt es sich dabei um Zugriffsdaten auf das Dateisystem. Dies ist in der Regel sehr kostspielig zu durchsuchen und wird sehr häufig angefordert, daher ist es eine ausgezeichnete Sache für Ihr System, dies zu zwischenspeichern. Sie können den aktuellen Wert erneut abfragen, indem Sie das proc
-Dateisystem verwenden:
Output100
Wie derzeit konfiguriert, entfernt unser System Inode-Informationen zu schnell aus dem Cache. Wir können dies auf eine konservativere Einstellung wie 50 setzen, indem wir Folgendes eingeben:
Outputvm.vfs_cache_pressure = 50
Erneut, 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:
Fügen Sie am Ende die Zeile hinzu, die Ihren neuen Wert angibt:
vm.vfs_cache_pressure=50
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Abschluss
Wenn Sie die Schritte in diesem Leitfaden befolgen, haben Sie etwas Spielraum für Fälle, die sonst zu Speicherüberlauf-Ausnahmen führen würden. Swap-Speicher kann unglaublich nützlich sein, um einige dieser häufigen Probleme zu vermeiden.
Wenn Sie auf OOM (Out of Memory) Fehler stoßen oder feststellen, dass Ihr System nicht in der Lage ist, die benötigten Anwendungen zu verwenden, ist die beste Lösung, Ihre Anwendungskonfigurationen zu optimieren oder Ihren Server zu aktualisieren.
Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04