Warum die Last hoch ist, obwohl weder CPU noch Festplatte überlastet sind

20

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 6zeigt 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

  1. Wenn es nicht die Festplatte oder die CPU ist, was dann?
  2. Es scheint, als würden 15,6% der CPU-Zeit für das Warten aufgewendet. Worauf genau könnte es warten?
user4951
quelle
2
Wie lauten die CPU-Spezifikationen und wie hoch ist die Auslastung?
Sepehr
Last ist über 100
user4951
Die Auslastung ist relativ zur Anzahl der CPU- und CPU-Kerne. Was sind die CPU-Spezifikationen Ihres Systems?
25.

Antworten:

49

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( -Haktiviert 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 Statusund 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 SSpalte nach Prozessen, die Doder haben R(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 Functionund 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 WCHANFeld 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 WCHANFeld 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 stracedie Prozesse immer ausprobieren , um herauszufinden, was sie tun, aber das ist der schwierige Weg.

Patrick
quelle
Normalerweise drücke ich einfach den Pfeil nach links, um die Sortierung zu ändern.
Nemo
2

Prozesse mit kurzer Lebensdauer wie das Kompilieren von Jobs oder das Fehlschlagen von Prozessen in einer Schleife sind in Überwachungswerkzeugen wie topiostat usw. häufig nicht sichtbar .

In solchen Fällen hilft das Linux Audit Framework

Der Täter, zum Beispiel eine Störungsschleife

while :; do gcc /dev/zero ; done >/dev/null 2>&1

So verwenden Sie auditd / auditctl:

apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve

Alle Prozessstarts aus Protokoll gestohlen

Gemeinschaft
quelle
Wenn sie nicht in angezeigt werden 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 wird top. Wenn dies nicht der Fall ist, ist dies kein wesentlicher Beitrag.
Patrick
0

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:

top - 00:03:48 up 15 days, 14:56,  3 users,  load average: 29, 21, 20

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 psgerettet 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:

ps -e v

und suchen Sie nach Prozessen mit Doder SLin 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 veinige Male ausgeführt werden und auch iostat 3keine 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.

Arunas Bartisius
quelle