Ich habe unten einen Produktionshost:
Das System verwendet 1 GB Swap, während fast 40 GB freier, ungenutzter Speicherplatz zur Verfügung stehen. Sollte ich mir darüber Sorgen machen, oder ist es meistens normal?
centos
performance
memory
swap
MrDuk
quelle
quelle
free -m
. Die Grafiken sind schwer zu lesen.Antworten:
Dies ist kein Problem und wahrscheinlich normal. Viele Codes (und möglicherweise Daten) werden sehr selten verwendet, sodass das System sie austauscht, um Speicherplatz freizugeben.
Das Auslagern ist meist nur dann ein Problem, wenn der Speicher kontinuierlich ein- und ausgelagert wird. Es ist diese Art von Aktivität, die die Leistung beeinträchtigt und auf ein Problem an einer anderen Stelle im System hinweist.
Wenn Sie Ihre Swap-Aktivität überwachen möchten, können Sie mit mehreren Dienstprogrammen, aber
vmstat
in der Regel sehr nützlich, zIgnorieren Sie die erste Zeile als Aktivität seit dem Systemstart. Beachten Sie die Spalten
si
undso
unter---swap--
; Sie sollten im Allgemeinen ziemlich klein sein, wenn nicht die meiste Zeit 0.Erwähnenswert ist auch, dass dieses präventive Austauschen mit einer Kernel-Einstellung gesteuert werden kann. Die Datei at
/proc/sys/vm/swappiness
enthält eine Zahl zwischen 0 und 100, die dem Kernel mitteilt, wie aggressiv der Speicher ausgelagert werden soll. Zeigen Sie die Datei an, um zu sehen, auf was dies festgelegt ist. Standardmäßig haben die meisten Linux-Distributionen den Standardwert 60. Wenn Sie jedoch keine Auslagerungen sehen möchten, bevor der Speicher voll ist, geben Sie eine 0 in die Datei wie folgt ein:Dies kann durch Hinzufügen dauerhaft gemacht werden
zu
/etc/sysctl.conf
.quelle
echo 0 >/proc/sys/vm/swappiness
. Dies kann durch Hinzufügenvm.swappiness = 0
von /etc/sysctl.conf dauerhaft gemacht werden.swappiness=7
oder ohne etwas werden langfristig nicht verwendete Seiten ausgetauscht. Es gibt einen großen Unterschied zuswappiness=0
jedem anderen Wert, auch zu niedrigen Werten. Die Kernel-Standardeinstellungswappiness=60
ist im Allgemeinen für Server geeignet und nur für die interaktive Desktop-Verwendung, bei der eine geringe Austauschbarkeit gut ist. Aber es auf 7 oder so zu setzen, sollte nicht viel schaden. (Aber ich habe nicht überprüft, ich bin kein Server-Sysadmin).swappiness
funktioniert alles hervorragend. Mit dem Druck werden Sie sehen, dass derswappiness=7
Dateicache für einen längeren Zeitraum fast vollständig ausgehungert ist , währendswappiness=60
viel Cache aufgelöst wird, aber auch innerhalb von Sekunden ein Auslagerungsprozess einsetzt. Es ist immer noch der Cache, der das Schlagen nimmt, aber auf eine viel ausgeglichenere Art und Weise.Linux schreibt vorbeugend Seiten auf die Festplatte, wenn es nichts Besseres zu tun hat. Dies bedeutet jedoch nicht , dass diese Seiten aus dem Speicher entfernt werden. Es ist nur so , dass für den Fall , es muss diese Seiten in der Zukunft vertreiben, ist es nicht für müssen warten sie auf die Festplatte geschrieben werden, da sie bereits vorhanden sind.
Schließlich ist der Grund, warum Ihnen der Speicher ausgeht, wahrscheinlich, dass Ihr Computer bereits hart arbeitet und Sie ihn nicht zusätzlich mit dem Austauschen belasten möchten. Tauschen Sie lieber, wenn die Maschine nichts tut.
Aus einem ähnlichen Grund sollte Ihr Speicher immer voll sein. Speicherseiten, Dateisystem-Cache,
tmpfs
es gibt so viele Dinge, die im Speicher gehalten werden könnten. Sie sollten sich wirklich Sorgen machen, wenn Ihr Gedächtnis leer ist. Immerhin haben Sie eine Menge Geld dafür bezahlt (zumindest im Vergleich zu der gleichen Menge an Speicherplatz), damit es besser genutzt werden kann!quelle
Swap verwendet ist nicht schlecht, aber eine Menge Swap-Aktivität ist
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:
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.
quelle
si
tödlicher für Ihren Server alsbi
? Beides bedeutet, dass ein Programm darauf wartet, dass 4096 Bytes von der Festplatte in den Speicher gelesen werden. Dasbi
ist aus jeder Datei undsi
aus einer bestimmten engen Kategorie von Dateien (aber ihre Bytes bewegen sich genauso schnell durch genau denselben Pfad).swappiness=0
scheint völlig ungeeignet für Server. Sie könnten es für ein interaktives Desktop-System in Betracht ziehen (aber selbst dannswappiness=1
ist es eine bessere Wahl, um eventuell wirklich kalte Seiten auszutauschen). Siehe Kommentare zu einer anderen Antwort .swappiness=7
oder etwas reduziert die Auslagerungsaktivität drastisch, ohne dass kalte Seiten bis zum OOM in den RAM gepinnt werden, und ist eine Überlegung wert, wenn Sie der Meinung60
sind, dass sie für einen bestimmten Server zu ausgelagert sind.si
das schlimmer alsbi
. Die meisten Server-Softwareprogramme basieren auf der Annahme, dass E / A von der Festplatte langsam sein können, und verwenden Threads, asynchrone E / A oder eine andere Technik, um im Allgemeinen während des Wartens auf E / A reaktionsfähig zu bleiben. Ein Seitenfehler kann überall auftreten. Im schlimmsten Fall kann nach dem Aufheben einer Sperre ein langsamer Seitenfehler auftreten, der alle anderen Threads für ~ 10 ms daran hindert, in diesen kritischen Abschnitt zu gelangen (mit Auslagerung bei langsamer Rotation). Dies kann plausibel sein, wenn ein kritischer Abschnitt Daten aus einer gemeinsam genutzten Datenstruktur auf eine möglicherweise kalte Seite kopiert.Dies ist keine Antwort auf Ihre Frage. sondern nur zusätzliche Informationen, die Ihnen helfen, eine fundierte Entscheidung zu treffen.
Wenn Sie wissen möchten, welche Prozesse speziell wie viel Swap verwenden, finden Sie hier ein kleines Shell-Skript:
Ich sollte auch hinzufügen, dass tmpfs auch auslagern wird. Dies ist häufiger auf modernen Linux-Systemen der Fall, die systemd verwenden und mit tmpfs User-Space / tmp-Overlays erstellen.
quelle
awk '/Swap/ {sw += $2} FNR==1 { /*first line of a new file */ find the command somehow, maybe still fork/exec ps;} END { print totals }' /proc/[0-9]*/smaps
. Das läuft cut und ps für jeden Prozess und grep + awk mehrmals für jeden Prozess im System.Ich habe festgestellt, dass die Replikation von MySQL Cluster langsamer wird oder fehlschlägt, wenn die Agenten stark ausgetauscht werden. Vielleicht haben einige Anwendungen nichts dagegen oder profitieren sogar von einem gewissen Austausch, aber die Datenbanken scheinen wirklich darunter zu leiden. Wie auch immer viele Diskussionen, die ich in Foren gesehen habe, behandeln den Austausch, der aus der spezifischen Arbeitslastdiskussion dekontextualisiert wurde.
In der DBA-Welt scheint der Konsens zu lauten: "Wenn Sie MySQL (oder wirklich jedes andere DBMS) ausführen, möchten Sie keine E / A in Ihrem Auslagerungsbereich sehen. Skalieren der Cache-Größe (mithilfe von) innodb_buffer_pool_size (im Fall von MySQL) ist die Standardpraxis, um sicherzustellen, dass genügend freier Speicher vorhanden ist, sodass kein Austausch erforderlich ist.
Aber was ist, wenn Sie einen Fehler oder eine Fehleinschätzung begehen und tauschen? Wie stark wirkt es sich wirklich auf die Leistung aus? Genau das wollte ich untersuchen. "
Ich hoffe, die Leser finden die folgenden Links apropos.
https://www.percona.com/blog/2017/01/13/impact-of-swapping-on-mysql-performance/
https://www.percona.com/blog/2010/01/18/why-swapping-is-bad-for-mysql-performance/
quelle