it-swarm.com.de

Sollte ich mir Sorgen machen, dass Swap auf einem Host mit fast 40 GB freiem Speicher verwendet wird?

Ich habe unten einen Produktions-Host:

(htop

Das System verwendet 1 GB Swap und behält dabei fast 40 GB freien, nicht genutzten Speicherplatz bei. Sollte ich mir darüber Sorgen machen oder ist es meistens normal?

40
MrDuk

Dies ist kein Problem und wahrscheinlich normal. Viel Code (und möglicherweise Daten) wird sehr selten verwendet, sodass das System ihn austauscht, um Speicher freizugeben.

Das Austauschen ist meist nur dann ein Problem, wenn der Speicher kontinuierlich ein- und ausgelagert wird. Diese Art von Aktivität beeinträchtigt die Leistung und deutet auf ein Problem an anderer Stelle im System hin.

Wenn Sie Ihre Swap-Aktivität überwachen möchten, können Sie dies mit mehreren Dienstprogrammen tun, aber vmstat ist normalerweise sehr nützlich, z.

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 348256  73540 274600    0    0     1     9    9    6  2  0 98  0  0
 0  0      0 348240  73544 274620    0    0     0    16   28   26  0  0 100  0  0
 0  0      0 348240  73544 274620    0    0     0     0   29   33  0  0 100  0  0
 0  0      0 348240  73544 274620    0    0     0     0   21   23  0  0 100  0  0
 0  0      0 348240  73544 274620    0    0     0     0   24   26  0  0 100  0  0
 0  0      0 348240  73544 274620    0    0     0     0   23   23  0  0 100  0  0

Ignorieren Sie die erste Zeile, da dies eine Aktivität seit dem Start des Systems ist. Beachten Sie die Spalten si und so unter ---swap--; Sie sollten im Allgemeinen ziemlich kleine Zahlen sein, wenn nicht die meiste Zeit 0.

Erwähnenswert ist auch, dass dieses präventive Austauschen mit einer Kerneleinstellung gesteuert werden kann. Die Datei bei /proc/sys/vm/swappiness enthält eine Zahl zwischen 0 und 100, die dem Kernel mitteilt, wie aggressiv der Speicher ausgelagert werden soll. Cat die Datei, um zu sehen, auf was dies eingestellt ist. Standardmäßig ist dies bei den meisten Linux-Distributionen standardmäßig 60, aber wenn Sie keinen Austausch sehen möchten, bevor der Speicher erschöpft ist, geben Sie eine 0 wie folgt in die Datei ein:

echo 0 >/proc/sys/vm/swappiness

Dies kann durch Hinzufügen dauerhaft gemacht werden

vm.swappiness = 0

zu /etc/sysctl.conf.

68
user9517

Linux schreibt präventiv Seiten auf die Festplatte, wenn es nichts Besseres zu tun hat. Das bedeutet jedoch nicht , dass diese Seiten aus dem Speicher entfernt werden. Es ist nur so, dass für den Fall, dass diese Seiten irgendwann in der Zukunft entfernt werden müssen , es nicht warten muss, bis sie auf die Festplatte geschrieben werden, weil sie sind schon da.

Schließlich liegt der Grund dafür, dass Ihnen der Arbeitsspeicher ausgeht, wahrscheinlich darin, dass Ihr Computer bereits hart arbeitet und Sie ihn nicht zusätzlich mit dem Auslagern belasten möchten. Besser tauschen, wenn die Maschine nichts tut.

Aus einem ähnlichen Grund sollte Ihr Speicher immer voll sein. Speicherseiten, Dateisystem-Cache, tmpfs, es gibt so viel Zeug, das im Speicher gespeichert werden könnte. Wirklich, Sie sollten besorgt sein, wenn Ihr Gedächtnis leer ist; Immerhin haben Sie viel Geld dafür bezahlt (zumindest im Vergleich zu der gleichen Menge an Speicherplatz), also sollten Sie es besser nutzen!

25
Jörg W Mittag

Der verwendete Swap ist nicht schlecht, aber viel Swap-Aktivität

  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

Die Spalte swapd ist überhaupt kein Problem. Nicht-Null-Werte in den Spalten si und , sodass für die Serverleistung tödlich sind . 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 letzten Ausweg zu verwenden. Dadurch werden einige MB an Programmen verschwendet, die sich nicht im RAM befinden müssen. Es ist jedoch vorzuziehen, das Aufblähen Ihrer Festplattenzugriffswarteschlangen auszutauschen.

Bearbeiten 1: Warum der Standardwert für 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, als das gesamte RAM in einem Bruchteil einer Sekunde auf die Festplatte verschoben werden konnte. Selbst mit den langsameren Festplatten dieser Zeit. Deshalb sind Standard-Swap-Richtlinien so aggressiv. = RAM war damals der Engpass. Seitdem RAM hat sich um mehr als das 10.000-fache und die Festplattengeschwindigkeit um das 10-fache erhöht. Dadurch wurde der Engpass auf die Festplattenbandbreite verschoben.

Edit 2: Warum ist so eine Aktivität für Server tödlich?

Si und also Aktivität auf Maschinen mit Tonnen von RAM ist tödlich, weil das System mit sich selbst um RAM kämpft. Was passiert, ist, dass Festplatten, selbst große Speicher, im Vergleich zu RAMs zu langsam sind. Aggressiver Swap bevorzugt den Kernel-Festplatten-Cache gegenüber Anwendungsdaten und ist die häufigste Quelle Da das Betriebssystem auf jedem si den Festplatten-Cache freigeben muss, ist die Lebensdauer des zusätzlichen Caches, den Swap bereitstellt, zu gering Das Ergebnis ist, dass Sie Festplattenbandbreite zum Speichern des Caches verwenden, der wahrscheinlich nicht verwendet wird, und Ihre Programme anhalten, die auf die si 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 in Zukunft nicht mehr, wenn in den Betriebssystemen intelligentere Swap-Algorithmen entwickelt werden.

Edit 3: "kalte" Seiten

Die Leute romantisieren den Tauschalgorithmus. Einige sagen, "es werden weniger verwendete Seiten des RAM benötigt", aber dies ist überhaupt nicht das, was der Kernel tut. Die Sache, die über Swap schwer zu verstehen ist, ist, dass 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 legt und nicht benötigte Seiten dort bleiben. Das Problem dieses Algorithmus ist, dass Seiten zum Swap gehen müssen, um zu wissen, ob sie von den Anwendungen benötigt werden. Und das bedeutet, dass viele "heiße" Seiten zum Tausch gehen. Das Problem dabei ist, dass Festplatten im Vergleich zum RAM zu langsam sind. Die Folge davon ist, dass beim Starten des Austauschs alle Anwendungen zufällige Pausen erhalten, die auf die Festplatten warten, was die Latenz und den Durchsatz beeinträchtigt.

Ich habe meinen eigenen Benchmark erstellt, ein realistisches Szenario, das vielen Anwendungen mit einem anständigen Volumen sehr häufig vorkommt. Bei meinen Tests habe ich keine Vorteile hinsichtlich Durchsatz oder 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 ist. Swaps sind nur für Notfälle. Diese Momente, in denen zu viele Anwendungen gleichzeitig ausgeführt werden und Sie eine Speicherspitze erhalten. Ohne Swap würde dies zu Fehlern aufgrund von Speichermangel führen. Ich betrachte die Swap-Nutzung als einen Fehler der Entwicklungs- und Produktionsteams. Dies ist nur eine Meinung, die weit über das hinausgeht, was wir hier besprochen haben, aber ich denke. Natürlich haben meine Anwendungen selbst eine ausgezeichnete Speicherverwaltung.

11
Lucas

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:

#!/bin/bash

set -o posix
set -u

OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"` ; do
  PID=`echo $DIR | cut -d / -f 3`
  PROGNAME=`ps -p $PID -o comm --no-headers`

  SUM=0
  for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'` ; do
    let SUM=$SUM+$SWAP
  done
  echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"

  let OVERALL=$OVERALL+$SUM
done
echo "Overall swap used: $OVERALL"

Ich sollte auch hinzufügen, dass tmpfs auch austauschen wird. Dies ist häufiger bei modernen Linux-Systemen mit systemd der Fall, die mithilfe von tmpfs User-Space/TMP-Overlays erstellen.

8
Aaron

Ich habe festgestellt, dass die MySQL Cluster-Replikation langsamer wird oder fehlschlägt, wenn die Agenten stark austauschen. Vielleicht haben einige Anwendungen nichts dagegen oder profitieren sogar von einem Austausch, aber Datenbanken scheinen wirklich darunter zu leiden. Allerdings haben viele Diskussionen, die ich in Foren gesehen habe, den aus der spezifischen Arbeitslastdiskussion dekontextualisierten Swap besprochen.

In der DBA-Welt scheint der Konsens zu sein: "Es ist normal, dass Sie beim Ausführen von MySQL (oder wirklich jedem anderen DBMS) keine E/A in Ihrem Swap-Bereich sehen möchten. Skalieren der Cache-Größe (mit innodb_buffer_pool_size (im Fall von MySQL) ist Standard, 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 machen und ein Austausch stattfindet? Wie stark wirkt sich das 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/

0
Ross Nesbitt