Linux-Leistung: Warum Sie fast immer Swap Space hinzufügen sollten

Wir wissen, dass die Verwendung von Linux-Swap Space anstelle von RAM (Arbeitsspeicher) die Leistung stark beeinträchtigen kann. Man könnte sich also fragen, ob es nicht besser wäre, den Swap Space zu löschen, da ich mehr als genug Speicher zur Verfügung habe. Die kurze Antwort lautet: Nein. Es gibt Leistungsvorteile, wenn der Swap-Speicher aktiviert ist, selbst wenn Sie mehr als genug Arbeitsspeicher haben. Update, siehe auch Teil 2: Linux-Leistung: Fügen Sie fast immer Swap-Speicher (ZRAM) hinzu.

Selbst wenn mehr als genug Arbeitsspeicher auf dem Server installiert ist, werden Sie oft feststellen, dass der Swap-Speicher nach längeren Betriebszeiten belegt ist. Sehen Sie sich das folgende Beispiel eines Live-Chat-Servers mit etwa einem Monat Betriebszeit an:

 total used free shared buff/cache availableMem: 3.7G 1.0G 445M 84M 2.2G 2.2GSwap: 1.8G 308M 1.5G

Die Ausgabe von free -h zeigt hier 308M belegten Swap-Speicher. Als ich die Swap-Prüfung durchführte, gab es keine Anzeichen für laufende oder unzeitgemäße Swap-E/A-Aktivitäten. Auch der kswap-Dienst verbrauchte nicht viel CPU-Zeit. Tatsächlich war der kswap-Prozess in top (Top-Prozesse sortiert nach CPU-Zeit) nirgends zu finden. Um dies zu bestätigen, habe ich den folgenden Befehl verwendet:

ps -A | grep kswap 40 ? 00:00:29 kswapd0

…in diesem Fall, wie in vielen anderen, beeinträchtigt die Swap-Nutzung also nicht die Leistung des Linux-Servers. Schauen wir uns nun an, wie Swap-Speicherplatz die Leistung von Linux-Servern tatsächlich verbessern kann.

Aktualisierung: Vor kurzem habe ich Manjoro i3 auf meinem Pinebook Pro installiert. Es ist jetzt standardmäßig mit aktiviertem ZRAM ausgestattet.

Vorteile von Swap-Speicher auf Systemen mit ausreichendem RAM

oben 512GB Server - 2GB Swap verwendet

oben 512GB Server - 2GB Swap verwendet

Es ist normal und kann eine gute Sache für Linux-Systeme sein, etwas Swap zu verwenden, selbst wenn noch RAM verfügbar ist. Der Linux-Kernel verschiebt Speicherseiten, die kaum genutzt werden, in den Swap-Bereich, um sicherzustellen, dass für häufiger genutzte Speicherseiten (eine Seite ist ein Teil des Speichers) noch mehr cachbarer Platz im Speicher zur Verfügung steht. Die Swap-Nutzung wird zu einem Leistungsproblem, wenn der Kernel gezwungen ist, ständig Speicherseiten in den und aus dem Speicher und dem Swap-Bereich zu verschieben.

Ein weiterer Vorteil ist, dass Swap den Administratoren Zeit gibt, auf Probleme mit wenig Speicher zu reagieren. Wir bemerken oft, dass der Server langsam arbeitet, und stellen bei der Anmeldung fest, dass viel ausgelagert wird. Ohne Swap (wie im nächsten Abschnitt beschrieben) kann eine Speicherknappheit sehr viel plötzlichere und schwerwiegendere Kettenreaktionen auslösen. Daher empfehle ich normalerweise, den Swap-Speicher auf die Größe des größten Prozesses einzustellen. Zum Beispiel der konfigurierte Speicher von MySQL in my.cnf. Er kann sogar noch kleiner sein, vor allem, wenn Sie eine Überwachungs- und/oder Warnfunktion eingerichtet haben.

Einige empfehlen, keinen Swap-Speicher oder einen Swap-Speicher zu verwenden, der etwas größer ist als der gesamte RAM-Speicher. Wenn Sie stichhaltige Gründe dafür anführen können, dann ist das vielleicht Ihre Entscheidung. Auf Servern ist dies jedoch kaum der Fall, und Sie sollten Ihre Entscheidung stattdessen mit den Auswirkungen abwägen, die Swap auf Ihre spezifischen Anwendungen hat. Swap ändert nichts an der Menge an RAM, die für einen gesunden Server oder Desktop benötigt wird. Er soll die Leistung gesunder Systeme ergänzen.

Zusammenfassend:
– Auch wenn noch Arbeitsspeicher verfügbar ist, wird der Linux-Kernel Speicherseiten, die kaum genutzt werden, in den Swap-Bereich verschieben.
– Es ist besser, Speicherseiten, die eine Weile inaktiv waren, auszulagern und häufig genutzte Daten im Cache zu halten, und dies sollte dann geschehen, wenn der Server am meisten im Leerlauf ist, was das Ziel des Kernels ist.
– Vermeiden Sie es, den Swap Space zu groß zu wählen, wenn dies zu einer Verlängerung von Leistungsproblemen, Ausfällen oder Ihrer Antwortzeit führt (ohne angemessene Überwachung/Alarme).

Swap Space vs. No Swap bei geringem verfügbaren Speicher

Wenn Sie nicht genug Speicher haben, wird der Swap Space ziemlich oft und deutlich mehr bei Speicherbedarfsspitzen verwendet. Wenn Sie nicht genügend Speicher und keinen Swap-Speicherplatz haben, wird dies oft dazu führen, dass die Zuweisung von Speicher für Anfragen, die mehr Speicherseiten benötigen, fehlschlägt. Als letzten Ausweg setzt der Kernel OOM-Killer ein, um Prozesse mit hohem Speicherbedarf (in der Regel MySQL, Java usw.) auszuschalten.

Für einen detaillierteren Blick auf den Swap Space von Linux lesen Sie die Kapitel Swap Management und Page Frame Reclamation in den Kernel.org docs. Schauen Sie sich auch den letzten Abschnitt „Kernel cache pressure and swappiness“ meines anderen Blog-Beitrags an, um Tipps zur Optimierung der Linux-Swap Space-Nutzung durch den Kernel zu erhalten. Wenn Ihr Swap Space „used“ immer ‚0‘ ist, dann haben Sie in der Tat eine Menge frei verfügbaren RAM. In diesem Fall kann es sicher sein, den Swap Space zu entfernen… oder Sie können den Cache-Druck Ihres Kernels anpassen, um noch mehr RAM zu nutzen.

Zusammenfassend:
– Swap I/O skaliert sehr schlecht. Wenn Speicherseiten nicht nur dann ausgelagert werden können, wenn der Server im Leerlauf ist, sollten Sie Swap tunen oder deaktivieren. Dies ist in der Regel nicht der Fall, daher der Titel „fast immer“ dieses Blogbeitrags.
– Wenn Swap deaktiviert ist, machen sich Leistungsprobleme sehr schnell bemerkbar, und der OOM-Killer kann Sie erwischen! 🙂

Zum Vergleich hier die Ausgabe von free unter Verwendung einer älteren Version von free aus procps-ng-3.3.1 auf demselben Server:

 total used free shared buffers cachedMem: 3.7G 3.3G 445M 0B 4.2M 1.7G-/+ buffers/cache: 1.6G 2.1GSwap: 1.8G 308M 1.5G

Kernel-Cache-Druck und Swappiness

Nun, da Sie Swap aktiviert haben. Überlegen Sie, wie Sie den Cache-Druck und die Swap-Neigung (vm.swappiness) Ihres Servers anpassen können, indem Sie die folgende Anleitung aus dem vorherigen Artikel befolgen: Linux-Server braucht ein RAM-Upgrade? Prüfen Sie mit top, free, vmstat und sar:

vfs_cache_pressure – Steuert die Tendenz des Kernels, den Speicher zurückzufordern, der für das Caching von Verzeichnis- und Inode-Objekten verwendet wird. (Standardwert = 100, empfohlener Wert 50 bis 200)

swappiness – Mit diesem Regler wird festgelegt, wie aggressiv der Kernel Speicherseiten auslagert. Höhere Werte erhöhen die Aggressivität, niedrigere Werte verringern den Umfang des Swaps. (Standardwert = 60, empfohlene Werte zwischen 1 und 60) Entfernen Sie Ihren Swap für den Wert 0, aber in den meisten Fällen nicht empfohlen.

Zur Bearbeitung können Sie diese Zeilen in der Datei /etc/sysctl.conf hinzufügen oder ersetzen. Wenn Sie zum Beispiel bis zu einem Upgrade nur wenig Arbeitsspeicher zur Verfügung haben, können Sie etwas wie folgt versuchen:

vm.swappiness=10vm.vfs_cache_pressure=200

Dadurch wird der Cache-Druck erhöht, was etwas kontraproduktiv erscheinen mag, da Caching gut für die Leistung ist. Zu häufiges Auslagern verringert jedoch die Gesamtleistung Ihres Servers erheblich mehr. Wenn Sie also nicht so viel Cache im Speicher halten, können Sie die Swap-Aktivität reduzieren. Wenn vm.swappiness auf 10 oder sogar 1 gesetzt ist, wird auch das Auslagern von Festplatten reduziert.

Auf einem gesunden Server mit viel verfügbarem Speicher können Sie Folgendes verwenden:

vm.swappiness=10vm.vfs_cache_pressure=50

Damit wird der Druck auf den Cache verringert. Da Caching gut für die Leistung ist, wollen wir die gecachten Daten länger im Speicher behalten. Since the cache will grow larger, we still want to reduce swapping to not cause increased swap I/O.

To check current values using these commands use:

sudo cat /proc/sys/vm/swappinesssudo cat /proc/sys/vm/vfs_cache_pressure

To enable these settings temporarily without rebooting, use the following commands:

sudo sysctl -w vm.swappiness=10sudo sysctl -w vm.vfs_cache_pressure=50