Wenn ich den folgenden Befehl ausführe, um die CPU-Auslastung zu ermitteln, erhalte ich eine nette + Benutzer-CPU-Auslastung.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
Ausgabe:
14.5
Hier bekomme ich das Problem, dass die Ausgabe vom obersten Befehl abhängt und sich daher nicht sofort als oberster Befehl ändert. Ich bekomme also nicht sofort die richtige CPU. Es gibt die gleiche Ausgabe und ändert sich nicht.
Ich möchte eine Echtzeit-CPU in der Ausgabe erhalten. Bitte helfen Sie mir, mein Kommando zu verbessern.
command-line
cpu
Ketan Patel
quelle
quelle
time
. Auf meinem System dauert es nur 0.165s.time (top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' )
Antworten:
Sie haben recht,
top
scheint bei der ersten Iteration eine inkorrekte CPU-Auslastung zu verursachen. Sie können dieses Problem folgendermaßen umgehen:Dies wird natürlich doppelt so lange dauern, aber es wird trotzdem funktionieren.
Wenn Sie dennoch möchten, dass es schneller funktioniert, können Sie die
-d
Option verwenden, z. B. für eine Gesamtmessdauer von 1 Sekunde die Hälfte davon:quelle
Technisch gesehen gibt der erste
top
nicht immer den gleichen Wert aus. Es wird nur die durchschnittliche CPU-Last seit dem letzten Start ausgegeben. Da zur Berechnung der CPU-Auslastungtop
das Delta der/proc/stat
Statistiken verwendet wird, wird der erste Wert beim Vergleich mit Null berechnet, was zu einem falschen (aber WAD-) Ergebnis führt.Wenn Sie nicht verwenden möchten
top
, können Sie Folgendes direkt analysieren/proc/stat
:Auf diese Weise ist es auch schneller und genauer.
Sie können es testen mit
stress
:Und TU
nach.
quelle
watch
kann er ausgeführt werden:watch -n1 "bash ./cpu"
/proc/stat
ist ziemlich cool, hat aber anscheinend den gleichen Nachteil wie die erste Iteration von top: Es gibt die durchschnittliche CPU-Last seit dem letzten Start aus, nicht die aktuelle.Um die Antwort von @ Ruslan zu erweitern und die
top
CPU-Auslastung zwischen Benutzern, Systemprozessen undnice
Prozessen aufzuteilen, wollen wir die Summe der drei. So können wirtop
imb
Atch-Modus arbeiten, der es uns ermöglicht, die Ausgabe zu analysieren. Wie hier erläutert , gibt die erste Iteration dertop -b
Werte die Prozentsätze seit dem Start zurück. Daher benötigen wir mindestens zwei Iterationen (-n 2
), um den aktuellen Prozentsatz abzurufen. Um die Dinge zu beschleunigen, können Sie died
Verzögerung zwischen den Iterationen auf Folgendes einstellen0.01
:quelle
Vielleicht verwenden Sie diese basierend auf der
ps
Ausgabe:quelle
Verwenden Sie den Befehl watch oder for loop in shell.
dh
watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"
quelle
Warum interessiert Sie die CPU-Auslastung? Der Lastdurchschnitt ist ein viel besserer Indikator:
Wenn Sie die CPU-Auslastung wirklich benötigen,
/proc/stat
ist das Parsen wahrscheinlich der richtige Weg.quelle
/proc/stat
auch die CPU-Auslastung nicht so an, wie sie ist, man muss sie zweimal mit etwas Zeit zwischen den Lesevorgängen lesen und einige Berechnungen durchführen, um die CPU-Auslastung zu ermitteln. Genau dastop
tut es.Mit
sar
BefehlDas heißt: Erhalte 10-mal das Ergebnis pro Sekunde
quelle