Swap verwendet ist nicht schlecht, aber eine Menge Swap-Aktivität ist
vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
6 0 521040 114564 6688 377308 8 13 639 173 0 1100 5 4 90 0
1 0 521040 114964 6688 377448 0 0 256 0 0 1826 3 4 94 0
0 0 521040 115956 6688 377448 0 0 0 0 0 1182 7 3 90 0
0 0 521036 115992 6688 377448 4 0 16 0 0 1154 10 2 88 0
3 0 521036 114628 6696 377640 0 0 928 224 0 1503 15 17 67 1
Der Spaltenwechsel ist überhaupt kein Problem. Nicht - Null - Werte in den Spalten si und so sind tödlich für die Serverleistung. Besonders diejenigen mit viel RAM.
Es ist am besten, Swapinness auf Computern mit mehreren GB RAM zu deaktivieren:
sysctl -w vm.swappiness=0
Dadurch wird der Swap nicht deaktiviert. Linux wird nur angewiesen, den Swap als letzte Maßnahme zu verwenden. Dadurch werden ein paar MB Programme verschwendet, die sich nicht im RAM befinden müssen. Es ist jedoch vorzuziehen, die Warteschlangen für den Festplattenzugriff auszutauschen.
Edit 1: warum der Standardwert von swappiness nicht optimal ist
Wir müssen uns daran erinnern, dass ein großer 486 vor zwei Jahrzehnten nur 32 MB RAM hatte. Swap-Algorithmen wurden entwickelt, um den gesamten Arbeitsspeicher in Sekundenbruchteilen auf die Festplatte zu verschieben. Selbst mit den langsameren Scheiben dieser Zeit. Aus diesem Grund sind Standard-Swap-Richtlinien so aggressiv. RAM war damals der Engpass. Seitdem hat sich die RAM-Größe mehr als 10.000 Mal und die Festplattengeschwindigkeit weniger als 10 Mal erhöht. Dies verschob den Engpass auf die Festplattenbandbreite.
Edit 2: Warum ist si so tödlich für Server?
Si und so ist Aktivität auf Rechnern mit Tonnen RAM tödlich, weil das System mit sich selbst um RAM kämpft. Was passiert ist, dass Festplatten, auch große Speicher, im Vergleich zu RAMs zu langsam sind. Aggressiver Austausch bevorzugt den Kernel-Festplatten-Cache gegenüber Anwendungsdaten und ist die häufigste Quelle für den Kampf um RAM. Da das Betriebssystem den Festplatten-Cache auf jedem si freigeben muss, ist die Lebensdauer des zusätzlichen Caches, den Swap bereitstellt, zu kurz, um nützlich zu sein. Das Ergebnis ist, dass Sie die Festplattenbandbreite zum Speichern des Caches verwenden, der wahrscheinlich nicht verwendet wird, und Ihre Programme anhalten, während sie auf die si- Seiten warten . Dies bedeutet, dass viele kritische Ressourcen verbraucht werden, ohne dass die Anwendungen davon profitieren.
Beachten Sie den Titel der Antwort "Viel Swap-Aktivität auf Servern mit viel RAM". Dies gilt nicht für Maschinen mit gelegentlicher Aktivität. Dies gilt möglicherweise nicht für die Zukunft, wenn in den Betriebssystemen intelligentere Auslagerungsalgorithmen entwickelt werden.
Edit 3: "kalte" Seiten
Die Leute romantisieren den Tauschalgorithmus. Einige sagen, "es braucht weniger belegte Seiten des RAM", aber dies ist überhaupt nicht das, was der Kernel tut. Die Sache mit Swap ist schwer zu verstehen, da der Kernel nicht weiß, was eine "kalte Seite" ist. Der Kernel verfügt nicht über eine gute Metrik, um festzustellen, ob die Seite verwendet wird oder wahrscheinlich in naher Zukunft verwendet wird. Um zu umgehen, dass der Kernel Seiten mehr oder weniger zufällig in den Swap einfügt, bleiben Seiten, die nicht benötigt werden, dort. Das Problem dieses Algorithmus ist, dass Seiten zum Tausch gehen müssen, um zu wissen, ob sie von den Anwendungen benötigt werden. Und das bedeutet, dass eine Menge "heißer" Seiten in den Tausch gehen werden. Das Problem dabei ist, dass Festplatten im Vergleich zum RAM zu langsam sind.
Ich habe meinen eigenen Benchmark erstellt, der ein realistisches Szenario darstellt, das für viele Anwendungen mit einem anständigen Volumen sehr häufig ist. Bei meinen Tests habe ich keine Vorteile für den Durchsatz oder die Latenz festgestellt, wenn Swaps verwendet werden. Weit davon entfernt. Wenn der Austausch beginnt, verlangsamt er sowohl den Durchsatz als auch die Latenz um mindestens eine Größenordnung.
Ich gehe noch ein bisschen weiter: Ich verstehe, dass Swap nicht für die Verarbeitung vorgesehen ist. Swaps sind nur für Notfälle. Diese Momente, in denen zu viele Anwendungen gleichzeitig ausgeführt werden und Sie einen Speicherspitzenwert erhalten. Ohne Swap würde dies zu Fehlern aufgrund von Speichermangel führen. Ich betrachte Swap-Nutzung als Ausfall der Entwicklungs- und Produktionsteams. Dies ist nur eine Meinung, die weit über das hinausgeht, was wir hier besprochen haben, aber ich denke. Natürlich verfügen meine Anwendungen über eine hervorragende Speicherverwaltung.