Wie man die Swap-Nutzung in Linux verwaltet

Sie haben möglicherweise Systemverzögerungen, hohe Swap-Nutzung oder Speicherprobleme in Ihrem Linux-System erlebt. Ein üblicher Rat ist, den “Swappiness-Wert zu verringern”, um die Swap-Nutzung zu reduzieren. Aber was ist Swappiness? Und ist es wirklich gut, daran zu schrauben?

Hinweis: Wir werden nicht im Detail auf die Swap-Partition eingehen. Sie können alles darüber in unserem Artikel lesen, was Sie über die Swap-Partition in Linux wissen müssen.

Swappiness

Es gibt einen Wert namens Swappiness in UNIX-ähnlichen Systemen, der bestimmt, wie Seiten im Speicher behandelt werden. Der Standardwert auf den meisten Systemen beträgt “60”, kann jedoch auf alles zwischen 0 und 100 eingestellt werden. Wenn der Speicher knapp wird, wird der Kernel entweder einige Dateicaches entfernen, um mehr freien RAM für Prozesse zu haben, oder er wird einige Prozessseiten vom RAM auf die Festplatte auslagern.

Ein Standardwert von 60 bedeutet, dass weniger ausgelagert wird und die I/O-Caches wahrscheinlicher für die Neuzuweisung von RAM freigegeben werden. Das Entfernen von Caches wird als “günstiger” (weniger ressourcenintensiv) angesehen, während das Auslagern von Seiten Festplattenlese- und -schreibvorgänge umfasst, was es “teurer” macht. Bei einem Wert von ‘60’ wird die Swap-Nutzung geringfügig niedriger sein als die Wiederverwendung von Caches. Wenn der Swappiness-Wert auf 100 erhöht wird, werden Auslagerung und Dateicache-Entfernung gleichwertig verwendet. Das bedeutet mehr Auslagerung und schnellere I/O als im Standard. Niedrigere Werte wie “10” bedeuten, dass die Swap-Nutzung deutlich geringer sein wird und I/O-Caches viel früher zugunsten von Prozessen entfernt werden können. Dies könnte die Interaktivität erhöhen, könnte jedoch auch die I/O-Geschwindigkeit beeinträchtigen.

Swappiness verringern

Sie werden oft den Rat auf Websites und Foren sehen, den Swappiness-Wert auf etwa “10” zu reduzieren. Dies soll Dinge beschleunigen, indem weniger Swap verwendet wird und mehr Prozesse im physischen RAM verbleiben. Diese Logik könnte jedoch etwas zu einfach sein und möglicherweise keine “One-Size-Fits-All”-Lösung darstellen.

Die Verringerung des Swappiness-Werts könnte in den folgenden Szenarien gut sein:

  • Für Datenbanksysteme oder wenn Sie viele datenbankintensive Anwendungen verwenden: Datenbanken verwalten Dateicaching in der Regel viel besser als das Betriebssystem. Wenn Sie Swappiness reduzieren, schränken Sie das Dateicaching des Betriebssystems ein und geben der Datenbank die Möglichkeit, ihre eigenen Caches zu verwalten.
  • Für Interaktivität: Wenn Sie viel multitasking betreiben, aber wenige Dateien bearbeiten oder keine großen Dokumente öffnen, könnte dies verbessern, wie reibungslos Ihr System funktioniert. Weniger Prozesse werden auf die Festplatte geschrieben, und da der RAM-Zugriff viel schneller ist, könnte Ihr Computer schneller erscheinen. Sie müssen auch beachten, dass dies die I/O-Leistung beeinträchtigen kann. Wenn Sie langsame Festplatten haben oder etwas I/O-intensives tun, könnte dies sogar die Leistung beeinträchtigen.
  • Für Placebo: Viele glauben, dass ein niedrigerer Swappiness-Wert das System beschleunigt. Ernsthaft, wenn Sie denken, dass Ihr System schneller ist, könnte es auch den Effekt haben, es schneller wahrzunehmen.

Bedenken Sie, dass die Verringerung des Swappiness-Werts zu Abstürzen und zufälligem Beenden von Prozessen durch das System führen kann, um Speicher freizugeben. Eine Verringerung der Swappiness ist am besten, wenn Sie über genügend RAM verfügen, um Ihr System reibungslos zu betreiben. Aber Sie sollten den Wert über “10” halten, da eine gewisse Swap-Nutzung vorteilhaft ist.

Swappiness erhöhen

Die Erhöhung des Swappiness-Werts kann den allgemeinen Vorteil haben, die I/O zu beschleunigen. Obwohl dies nicht oft empfohlen wird, könnte das Erhöhen des Swappiness-Werts nützlich sein, wenn:

  • Sie einige I/O-intensive Operationen durchführen und langsame, alte HDDs haben. Zum Beispiel: Backups durchführen oder Bilder im Batch bearbeiten kann I/O-intensiv sein (eine bemerkenswerte Ausnahme sind Datenbanken, die natürlicherweise I/O-intensiv sind, aber von einem niedrigeren Swappiness-Wert profitieren könnten, wie oben gesehen).
  • Sie wenig Speicher haben, aber relativ schnelle Festplatten haben. In diesem unwahrscheinlichen Szenario könnte ein höherer Swappiness-Wert helfen, den Speicher effizienter zu verwalten (obwohl ein zu hoher Wert wiederum die Leistung beeinträchtigen könnte).

Wie man Swappiness verwaltet

Zuerst sollten Sie überlegen, ob Sie diesen Wert überhaupt berühren müssen. Haben Sie Leistungsprobleme? Und noch wichtiger, haben Sie bereits andere Systemanpassungen versucht? Wenn nicht, ist es wahrscheinlich am besten, zuerst woanders zu suchen. Aber wenn Sie ein bestimmtes Szenario im Kopf haben, möchten Sie vielleicht fortfahren.

Als nächstes, wie hoch ist Ihre Swap-Nutzung? Sie können dies mit jedem Ihnen zur Verfügung stehenden Überwachungstool oder mit dem free-Befehl herausfinden. free -m gibt Ihnen einen Überblick über die Nutzung des Speichers in Megabyte. Für eine kontinuierliche Überwachung sollten Sie watch verwenden.

watch -n1 free -m

Dies führt den Befehl free -m jede Sekunde aus und gibt dessen Ausgabe aus, bis Sie “Ctrl + C” drücken.

swappiness-free-m

Wie Sie oben sehen, wird von dem System, auf dem dieser Artikel geschrieben wurde, nur sehr wenig Swap genutzt.

Wenn Sie jetzt wirklich Swapping erleben, könnten Sie daran interessiert sein, wie viel davon aktiv ist. Der Befehl vmstat gibt Ihnen alles, was Sie über die Nutzung des virtuellen Speichers Ihres Systems (Swap und physischen RAM zusammen) wissen müssen.

vmstat 1

swappiness-vmstat

Sie müssen die Spalte swap überprüfen, wobei si für “swap in” und so für “swap out” steht. Wenn die Zahlen hoch sind, bedeutet dies eine hohe Swap-Aktivität, die ein Indikator für Speicherprobleme ist. Wenn Sie Swap-Nutzung von free sehen, aber wenig aktives Swapping, könnte eine Anpassung des Swappiness-Wertes sinnvoll sein.

Es ist auch eine gute Idee, andere Leistungsbenchmarks wie Festplatten-I/O, Lastdurchschnitt usw. festzulegen, damit Sie bei der Prüfung Ihrer neuen Swappiness-Werte etwas zum Vergleichen haben.

Um einen anderen Swappiness-Wert zu testen, können Sie ihn vorübergehend mit dem sysctl-Befehl festlegen. Dies erfordert keinen Neustart, und die Wirkung ist sofort. Tatsächlich wird beim Neustart der Standardwert wiederhergestellt, sodass Sie relativ sicher experimentieren können:

sudo sysctl vm.swappiness=10

Natürlich können Sie jede andere Zahl anstelle von “10” (zwischen “0” und “100”) einsetzen.

Sobald Sie Ihren bevorzugten Wert gefunden haben, können Sie die Systemkonfiguration dauerhaft ändern, indem Sie “etc/sysctl.conf” bearbeiten.

sudo nano /etc/sysctl.conf

und die Zeilen

# Swappiness-Wert festlegen  
vm.swappiness=10

am Ende dieser Datei hinzufügen, wobei der Wert natürlich erneut auf Ihre Präferenz eingestellt ist.

Fazit

Die Senkung des Swappiness-Werts auf “10” wird oft als eine universelle Lösung empfohlen, aber die tatsächliche Anwendung dieser Technik könnte ein kleines bisschen komplizierter sein als das. Durch die Festlegung von Benchmarks, das Wissen über Ihr System, wie Sie es nutzen und was Sie davon benötigen, können Sie Ihre Swap-Nutzung optimieren und eine Leistungssteigerung (entweder in der Interaktivität oder bei der I/O) erzielen.