Tutorial

Hinzufügen von Auslagerungsspeicher unter Ubuntu 20.04

Linux BasicsUbuntuUbuntu 20.04

Einführung

Eine Möglichkeit, sich vor Fehlern aufgrund von Speichermangel in Anwendungen zu schützen, besteht darin, Ihrem Server Auslagerungsspeicher hinzuzufügen. In diesem Leitfaden erfahren Sie, wie Sie einem Ubuntu 20.04-Server eine Auslagerungsdatei hinzufügen.

Warnung: Obwohl die Auslagerung im Allgemeinen für Systeme empfohlen wird, die herkömmliche rotierende Festplatten verwenden, kann das Platzieren der Auslagerung auf SSDs im Laufe der Zeit zu Problemen im Hinblick auf die Hardwareverschlechterung führen. Daher empfehlen wir, die Auslagerung bei DigitalOcean oder anderen Anbietern, die SSD-Speicher verwenden, nicht zu aktivieren.

Was ist Auslagerung?

Unter dem Begriff Auslagerung, hier auch als Swap bezeichnet, versteht man einen Teil des Festplattenspeichers, der für das Betriebssystem reserviert wurde, um vorübergehend Daten zu speichern, die es nicht mehr im RAM aufbewahren kann. Auf diese Weise können Sie die Informationsmenge erhöhen, die Ihr Server mit einigen Einschränkungen im Arbeitsspeicher speichern kann. Der Auslagerungsspeicher auf der Festplatte wird hauptsächlich verwendet, wenn im RAM nicht mehr genügend Speicherplatz vorhanden ist, um Anwendungsdaten zu speichern.

Die auf die Festplatte geschriebenen Informationen sind erheblich langsamer als die im RAM gespeicherten Informationen. Das Betriebssystem zieht es jedoch vor, weiterhin Anwendungsdaten im Speicher auszuführen und die Auslagerung für die älteren Daten zu verwenden. Insgesamt kann der Auslagerungsspeicher als Ersatz für die Erschöpfung des Arbeitsspeichers Ihres Systems ein gutes Sicherheitsnetz gegen Ausnahmen aufgrund von Speichermangel auf Systemen mit nicht verfügbarem SSD-Speicher sein.

Schritt 1 - Überprüfen des Systems auf Swap-Informationen

Bevor wir beginnen, können wir überprüfen, ob auf dem System bereits Auslagerungsspeicher verfügbar ist. Es ist möglich, mehrere Auslagerungsdateien oder -partitionen zu haben, aber im Allgemeinen sollte eine ausreichen.

Wir können sehen, ob das System eine konfigurierte Auslagerungsdatei oder -partition hat, indem wir Folgendes eingeben:

  • sudo swapon --show

Wenn Sie keine Ausgabe zurückerhalten, bedeutet dies, dass auf Ihrem System derzeit kein Auslagerungsspeicher verfügbar ist.

Mit dem Dienstprogramm free können Sie überprüfen, dass keine aktive Auslagerung vorhanden ist:

  • free -h
Output
total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B

Wie Sie in der Swap-Zeile der Ausgabe sehen können, ist auf dem System keine Auslagerung aktiv.

Schritt 2 - Überprüfen des verfügbaren Speicherplatzes auf der Festplattenpartition

Bevor wir unsere Auslagerungsdatei erstellen, überprüfen wir unsere aktuelle Festplattennutzung, um sicherzustellen, dass genügend Speicherplatz vorhanden ist. Tun Sie dies, indem Sie Folgendes eingeben:

  • df -h
Output
Filesystem 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 Spalte Mounted on ist in diesem Fall unsere Festplatte. In diesem Beispiel steht ausreichend Speicherplatz zur Verfügung (nur 1,4 G werden verwendet). Ihre Auslastung wird wahrscheinlich anders sein.

Obwohl es viele Meinungen über die angemessene Größe eines Auslagerungsspeichers gibt, hängt dies wirklich von Ihren persönlichen Vorlieben und Ihren Anwendungsanforderungen ab. Im Allgemeinen ist eine Größe, die dem RAM-Speicher Ihres Systems entspricht oder diesen verdoppelt, ein guter Ausgangspunkt. Eine andere gute Faustregel ist, dass alles über 4 GB Auslagerung wahrscheinlich unnötig ist, wenn Sie es nur als RAM-Ausweichlösung verwenden.

Schritt 3 – Erstellen einer Auslagerungsdatei

Nachdem 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.

Der beste Weg, eine Auslagerungsdatei zu erstellen, ist das fallocate-Programm. Dieser Befehl erstellt sofort eine Datei mit der angegebenen Größe.

Da der Server in unserem Beispiel über 1 GB RAM verfügt, erstellen wir in diesem Leitfaden eine 1 GB-Datei. Passen Sie dies an die Anforderungen Ihres eigenen Servers an:

  • sudo fallocate -l 1G /swapfile

Wir können überprüfen, ob die korrekte Speicherplatzgröße 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 Speicherplatzgröße erstellt.

Schritt 4 – Aktivieren der Auslagerungsdatei

Nachdem wir eine Datei mit der richtigen Größe zur Verfügung haben, müssen wir diese tatsächlich in Auslagerungsspeicher umwandeln.

Zunächst müssen wir die Berechtigungen der Datei sperren, damit nur Benutzer mit root-Berechtigungen den Inhalt lesen können. Dies verhindert, dass normale Benutzer auf die Datei zugreifen können, was erhebliche Auswirkungen auf die Sicherheit haben würde.

Machen Sie die Datei nur für root zugänglich, indem Sie Folgendes eingeben:

  • sudo chmod 600 /swapfile

Verifizieren 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, sind die Lese- und Schreibflags nur für den Benutzer root aktiviert.

Wir können jetzt die Datei als Auslagerungsspeicher markieren, indem wir Folgendes eingeben:

  • sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

Nach dem Markieren der Datei können wir die Auslagerungsdatei aktivieren, sodass unser System sie verwenden kann:

  • sudo swapon /swapfile

Verifizieren Sie, ob die Auslagerung verfügbar ist, indem Sie Folgendes eingeben:

  • sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

Wir können die Ausgabe des Dienstprogramms free erneut überprüfen, um unsere Ergebnisse zu bestätigen:

  • free -h
Output
total used free shared buff/cache available Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi Swap: 1.0Gi 0B 1.0Gi

Unsere Auslagerung wurde erfolgreich eingerichtet und wird von unserem Betriebssystem bei Bedarf verwendet.

Schritt 5 – Permanente Bereitstellung der Auslagerungsdatei

Unsere letzten Änderungen haben die Auslagerungsdatei für die aktuelle Sitzung aktiviert. Wenn wir jedoch neu starten, wird der Server die Auslagerungseinstellungen nicht automatisch beibehalten. Wir können dies ändern, indem wir die Auslagerungsdatei zu unserer /etc/fstab-Datei hinzufügen.

Sichern Sie die /etc/fstab-Datei, falls etwas schief geht:

  • sudo cp /etc/fstab /etc/fstab.bak

Fügen Sie die Informationen zur Auslagerungsdatei am Ende Ihrer Datei /etc/fstab hinzu, 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 – Optimieren Ihrer Auslagerungseinstellungen

Es gibt einige Optionen, die Sie konfigurieren können und die sich auf die Leistung Ihres Systems auswirken, wenn Sie mit Auslagerung arbeiten.

Anpassen der Swappiness-Eigenschaft

Der swappiness-Parameter konfiguriert, wie oft Ihr System Daten aus dem RAM in den Auslagerungsspeicher auslagert. Dies ist ein Wert zwischen 0 und 100, der einen Prozentsatz darstellt.

Bei Werten nahe Null lagert der Kernel keine Daten auf die Festplatte aus, es sei denn, dies ist unbedingt erforderlich. Denken Sie daran, dass Interaktionen mit der Auslagerungsdatei insofern „teuer“ sind, da sie viel länger dauern als Interaktionen mit dem RAM und eine erhebliche Leistungsminderung verursachen können. Wenn Sie dem System sagen, dass es sich nicht zu sehr auf die Auslagerung verlassen soll, wird Ihr System im Allgemeinen schneller.

Werte, die näher an 100 liegen, versuchen, mehr Daten auszulagern, um mehr RAM-Speicherplatz freizuhalten. Abhängig vom Speicherprofil Ihrer Anwendungen oder davon, wofür Sie Ihren Server verwenden, ist dies in einigen Fällen möglicherweise besser.

Wir können den aktuellen Swappiness-Wert sehen, indem wir Folgendes eingeben:

  • cat /proc/sys/vm/swappiness
Output
60

Für einen Desktop ist eine Swappiness-Einstellung von 60 kein schlechter Wert. Für einen Server möchten Sie ihn möglicherweise näher an 0 festlegen.

Mit dem Befehl sysctl können wir die Swappiness auf einen anderen Wert setzen.

Um beispielsweise die Swappiness auf 10 zu setzen, könnten wir Folgendes eingeben:

  • sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

Diese Einstellung bleibt bis zum nächsten Neustart bestehen. Wir können diesen Wert beim Neustart automatisch festlegen, indem wir die Zeile zu unserer /etc/sysctl.conf-Datei hinzufügen:

  • sudo nano /etc/sysctl.conf

Am Ende können Sie Folgendes hinzufügen:

/etc/sysctl.conf
vm.swappiness=10

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Anpassen der Cache-Druckeinstellung

Ein weiterer verwandter Wert, den Sie möglicherweise ändern möchten, ist vfs_cache_pressure. Diese Einstellung konfiguriert, in welchem Umfang das System inode- und dentry-Informationen über andere Daten zwischenspeichert.

Grundsätzlich handelt es sich hierbei um Zugriffsdaten zum Dateisystem. Das Nachschlagen ist im Allgemeinen sehr kostspielig und wird sehr häufig angefordert. Daher ist die Zwischenspeicherung für Ihr System eine hervorragende Sache. Sie können den aktuellen Wert anzeigen, indem Sie das proc-Dateisystem erneut abfragen:

  • cat /proc/sys/vm/vfs_cache_pressure
Output
100

In der aktuellen Konfiguration entfernt unser System inode-Informationen zu schnell aus dem Cache. Wir können dies auf eine konservativere Einstellung wie 50 einstellen, indem wir Folgendes eingeben:

  • sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

Dies gilt wiederum nur für unsere aktuelle Sitzung. Wir können dies ändern, indem wir es unserer Konfigurationsdatei hinzufügen, wie wir es mit unserer Swappiness-Einstellung getan haben:

  • sudo nano /etc/sysctl.conf

Fügen Sie unten die Zeile hinzu, die Ihren neuen Wert angibt:

/etc/sysctl.conf
vm.vfs_cache_pressure=50

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Zusammenfassung

Wenn Sie die Schritte in diesem Leitfaden befolgen, haben Sie in Fällen, in denen sonst Ausnahmen aufgrund von Speichermangel auftreten würden, etwas Luft zum Atmen. Auslagerungsspeicher kann unglaublich nützlich sein, um einige dieser häufigen Probleme zu vermeiden.

Wenn Sie auf OOM-Fehler (nicht genügend Speicher) stoßen oder feststellen, dass Ihr System die von Ihnen benötigten Anwendungen nicht verwenden kann, besteht die beste Lösung darin, Ihre Anwendungskonfigurationen zu optimieren oder Ihren Server zu aktualisieren.

Creative Commons License