Ich erhalte die folgende Ausgabe von top
:
Cpu(s): 43.8%us, 32.5%sy, 4.8%ni, 2.0%id, 15.6%wa, 0.2%hi, 1.2%si, 0.0%st
Mem: 16331504k total, 15759412k used, 572092k free, 4575980k buffers
Swap: 4194296k total, 260644k used, 3933652k free, 1588044k cached
Die Ausgabe von iostat -xk 6
zeigt Folgendes:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 360.20 86.20 153.40 1133.60 2054.40 26.61 1.51 6.27 0.77 18.38
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 22.60 198.80 17.40 31.60 265.60 921.60 48.46 0.18 3.70 1.67 8.20
sdc 16.80 218.20 22.20 23.40 261.60 966.40 53.86 0.21 4.56 1.49 6.78
Basierend auf dem oben Gesagten sieht es so aus, als müsste etwas überladen sein. Aber was?
Fragen
- Wenn es nicht die Festplatte oder die CPU ist, was dann?
- Es scheint, als würden 15,6% der CPU-Zeit für das Warten aufgewendet. Worauf genau könnte es warten?
performance
load
user4951
quelle
quelle
Antworten:
Aus Gründen der Klarheit ist die Last nicht direkt an die CPU gebunden. Dies ist eines der häufigsten Missverständnisse über die Belastung. Die Tatsache, dass Sie disk erwähnen, scheint anzuerkennen, dass Sie sich dessen bewusst sind, aber ich wollte es nur erwähnen, da ich Kommentare sehe, die andernfalls glauben.
Laden ist definiert als die Anzahl der Prozesse, die auf Systemressourcen warten. Dies ist in der Regel CPU, Festplatte oder Netzwerk, kann aber wirklich alles Hardware sein.
Ein "Prozess" ist auch nicht unbedingt ein vollständiger Prozess. Ein Thread wird als "Lightweight-Prozess" definiert, und jeder wartende Thread erhöht die Anzahl der Ladevorgänge.
Um herauszufinden, welche Prozesse ein Problem sind:
Ausführen
top -H
(-H
aktiviert das Anzeigen von Threads)Die Tastaturkürzel variieren je nach Version.
Mit neuerem Top (3.3 und neuer):
Drücken Sie f, um die Feldoptionen aufzurufen.
Gehen Sie mit den Pfeiltasten zu
S = Process Status
und drücken Sie s.Drücken Sie q, um zur Hauptseite zurückzukehren.
Drücken Sie Shift+ R, um die Sortierung umzukehren.
Mit älterem Top (vor 3.3):
Drücken Sie Shift+ o, um die Sortieroptionen aufzurufen.
Dann wnach Prozessstatus sortieren.
Dann Enter, um zur Hauptseite zurückzukehren.
Dann Shift+ R, um die Sortierung umzukehren.
Suchen Sie dann in der
S
Spalte nach Prozessen, dieD
oder habenR
(sie sollten sich jetzt oben befinden). Dies sind Prozesse, die zur Systemlast beitragen.Wenn der Prozess a anzeigt
D
, bedeutet dies "unterbrechungsfreier Schlaf". Normalerweise wird dies verursacht, wenn der Prozess auf E / A (Festplatte, Netzwerk usw.) wartet.Wenn der Prozess a anzeigt
R
, bedeutet dies, dass nur normale Berechnungen ausgeführt werden.Um mehr darüber zu erfahren, was diese Prozesse tun:
Mit neuerem Top (3.3 und neuer):
Drücken Sie f, um die Feldoptionen aufzurufen.
Gehen Sie mit den Pfeiltasten zu
WCHAN = Sleeping in Function
und drücken Sie d, um es zu aktivieren.Dann q, um zur Hauptseite zurückzukehren.
Mit älterem Top (vor 3.3):
Drücken Sie fdann y, um das
WCHAN
Feld zu aktivieren .Wenn Ihr System über die erforderlichen Kerneloptionen verfügt und die wchan-Datei auf Ihrem System vorhanden ist (ich vergesse, wo sie sich befindet und wie sie heißt) , sollte das
WCHAN
Feld Ihnen anzeigen , welche Kernelfunktion der Prozess gerade ausführt (wenn das Feld nur eine anzeigt)-
oder ein?
auf alles, Sie haben keine Unterstützung).Ein bisschen google hier und du solltest auf dem Weg sein.
Wenn Sie keinen Wchan-Support haben, können Sie
strace
die Prozesse immer ausprobieren , um herauszufinden, was sie tun, aber das ist der schwierige Weg.quelle
Prozesse mit kurzer Lebensdauer wie das Kompilieren von Jobs oder das Fehlschlagen von Prozessen in einer Schleife sind in Überwachungswerkzeugen wie
top
iostat usw. häufig nicht sichtbar .In solchen Fällen hilft das Linux Audit Framework
Der Täter, zum Beispiel eine Störungsschleife
So verwenden Sie auditd / auditctl:
Alle Prozessstarts aus Protokoll gestohlen
quelle
top
, tragen sie wahrscheinlich nicht zum Lastdurchschnitt bei. Damit es zum Lastdurchschnitt beiträgt, muss es sich über einen langen Zeitraum in einem Wartezustand befinden. Statistisch bedeutet dies, dass es in angezeigt wirdtop
. Wenn dies nicht der Fall ist, ist dies kein wesentlicher Beitrag.Ich hatte eine Situation, in der die NFS-Mounts getrennt wurden und leider einen Fehler gemacht und die Soft-Mount-Option nicht verwendet wurden. Daher waren viele Prozesse auf meinem Linux-Server blockiert, einschließlich Überwachung, lsof und sogar Bash-Sitzungen.
Nach dem Aufheben der Montage sah das System überlastet aus:
Das sah schrecklich aus, aber die CPU-Auslastung lag unter 15% und es gibt keine Festplatten-E / A. Ich habe einige Ratschläge bekommen, um ps durchzuarbeiten, aber das hat nicht geholfen, da es so aussah, als würden Prozesse meistens schlafen.
Dann
man ps
gerettet meine Nacht zum Schlafen, und nach der Untersuchung fand ich sehr wichtig STATUS Flaggen zu sehen, wie später identifizierte sie stecken Prozesse.Ausführen:
und suchen Sie nach Prozessen mit
D
oderSL
in der Spalte STAT. Diese waren wie Zombieprozesse, wurden jedoch nicht als Z-Zombies identifiziert.D - bedeutet hauptsächlich Festplattenaktivität (E / A), aber auch wenn Sie
ps -e v
einige Male ausgeführt werden und auchiostat 3
keine Aktivität feststellen, bedeutet dies, dass die E / A nicht funktioniert .SL - Dies bedeutet, dass im Speicher dieses Prozesses gesperrte Seiten vorhanden sind. Wenn Sie also feststellen, dass sich dieser Prozess nicht so verhalten sollte, ist es der nächste mögliche Kandidat, wenn er für einen längeren Zeitraum unverändert bleibt.
Nach einer Untersuchung habe ich dann einen nach dem anderen getötet, und mein Systemlastdurchschnitt hat sich normalisiert.
quelle