Ich habe einen ziemlich guten (dedizierten) Webserver mit guten Speicherressourcen:
System information
Server load 2.19 (8 CPUs)
Memory Used 29.53% (4,804,144 of 16,267,652)
Swap Used 10.52% (220,612 of 2,097,136)
Wie Sie sehen, verwendet mein Server Swap, wenn genügend freier Speicher verfügbar ist.
Ist das normal oder stimmt etwas mit der Konfiguration oder der Codierung nicht?
NB
Mein MySQL-Prozess verbraucht aus irgendeinem Grund über 160% der CPU-Leistung. Ich weiß nicht warum, aber ich habe nicht mehr als 70 gleichzeitige Benutzer ...
Antworten:
Das ist völlig normal.
Beim Systemstart wird eine Reihe von Diensten gestartet. Diese Dienste initialisieren sich selbst, lesen Konfigurationsdateien ein, erstellen Datenstrukturen und so weiter. Sie verbrauchen etwas Gedächtnis. Viele dieser Dienste werden während der gesamten Systemlaufzeit nicht mehr ausgeführt, da Sie sie nicht verwenden. Einige von ihnen können in Stunden, Tagen oder Wochen ausgeführt werden. All diese Daten befinden sich jedoch im physischen Speicher.
Natürlich kann das System diese Daten nicht wegwerfen. Es kann nicht nachgewiesen werden, dass buchstäblich nie darauf zugegriffen werden kann. Einer dieser Dienste kann beispielsweise der sein, der Ihnen den Fernzugriff auf die Box ermöglicht. Sie haben es vielleicht seit einer Woche nicht mehr benutzt, aber wenn Sie es benutzen, hat es besser funktioniert.
Das System weiß jedoch, dass es diesen physischen Speicher möglicherweise für Dinge wie einen Festplatten-Cache oder auf andere Weise verwenden möchte, die die Leistung verbessern. Es wird also opportunistisch getauscht. Wenn nichts Besseres zu tun ist, werden Daten, die lange nicht mehr verwendet wurden, mit Swap Space auf die Festplatte geschrieben. Die Seiten bleiben jedoch im physischen Speicher. Sie sind also weiterhin verfügbar, ohne dass Sie sie austauschen müssen.
Wenn das System später diesen physischen Speicher für etwas anderes benötigt, kann es diese Seiten einfach wegwerfen, da es sie bereits zum Auslagern geschrieben hat. Dies gibt dem System das Beste aus beiden Welten. Die Daten bleiben im Speicher erhalten, sodass auf sie zugegriffen werden kann, ohne dass sie von der Festplatte gelesen werden müssen. Wenn das System diesen Speicher jedoch für einen anderen Zweck benötigt, muss er nicht zuerst ausgeschrieben werden. Rundum großer Gewinn.
quelle
Dies kann vorkommen, wenn Sie in der Vergangenheit mehr Arbeitsspeicher als physischen Arbeitsspeicher auf dem Computer benötigt haben. Zu diesem Zeitpunkt wurden einige Daten in den Swap Space geschrieben.
Wenn später Speicher freigegeben wird, werden Daten aus dem Swap nicht automatisch in den RAM zurückgelesen. Dies geschieht nur, wenn die Daten im Swap tatsächlich von einem bestimmten Prozess benötigt werden. Das ist völlig normal.
Wie für Ihren Mysql-Prozess: Dies hängt alles von der Art der Abfragen ab, die Sie ausführen. Theoretisch könnten 2 sehr komplexe Abfragen ausreichen, um eine solche Last zu erhalten, unabhängig von der Anzahl Ihrer Benutzer. Sie können das Protokoll für langsame Abfragen aktivieren, um einen besseren Einblick in die lastintensiven Abfragen zu erhalten.
quelle
Sie können dieses Verhalten auch ändern, indem Sie
sysctl -w vm.swappiness=10
den Einsatz von Swap so lange reduzieren, bis er tatsächlich benötigt wird.Haben Sie für MySQL mindestens einen Basiskonfigurationstest mit dem Skript tuning-primer.sh durchgeführt ?
quelle
Dies ist wahrscheinlich, wie David erklärte, ein normales Verhalten des Linux-Kernels, kann aber auch ein Problem mit dem MySQL-Tausch-Wahnsinn sein . In Ihrem Fall (8 CPU, 16 GB RAM insgesamt, 5 GB verwendet) sollte Ihr Computer ein NUMA-System mit 4 Knoten (Sockets) und 4 GB RAM pro Knoten und einem MySQL InnoDB-Pufferpool von 4 sein GB.
Kurz gesagt (Sie sollten den Link oben lesen, um die vollständigen Details zu erfahren), ist dies der Fall:
Um dies zu vermeiden, ändern Sie die Speicherzuordnung für MySQL, um allen Kernen RAM zuzuweisen (weitere Informationen finden Sie unter dem obigen Link).
quelle