Ich frage mich, wie Sie die CPU-Auslastung des Systems ermitteln und beispielsweise mit bash in Prozent darstellen können.
Beispielausgabe:
57%
Wenn es mehr als einen Kern gibt, wäre es schön, wenn ein durchschnittlicher Prozentsatz berechnet werden könnte.
Schauen Sie sich cat /proc/stat
An
grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'
EDIT Bitte lesen Sie die Kommentare, bevor Sie diese kopieren, einfügen oder für ernsthafte Arbeiten verwenden. Dies wurde weder getestet noch verwendet. Es ist eine Idee für Benutzer, die kein Hilfsprogramm installieren möchten oder für etwas, das in einer beliebigen Distribution funktioniert. Manche Leute denken, man kann alles "passend installieren".
HINWEIS: Dies ist nicht die aktuelle CPU-Auslastung, sondern die gesamte CPU-Auslastung in allen Kernen seit dem Systemstart. Dies kann sich stark von der aktuellen CPU-Auslastung unterscheiden. Um den aktuellen Wert zu erhalten, muss top (oder ein ähnliches Tool) verwendet werden.
Du kannst es versuchen:
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
Probieren Sie mpstat
aus dem Paket sysstat
> Sudo apt-get install sysstat
Linux 3.0.0-13-generic (ws025) 02/10/2012 _x86_64_ (2 CPU)
03:33:26 PM CPU %usr %Nice %sys %iowait %irq %soft %steal %guest %idle
03:33:26 PM all 2.39 0.04 0.19 0.34 0.00 0.01 0.00 0.00 97.03
Dann einige cut
oder grep
, um die benötigten Informationen zu analysieren:
mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 - $ 12}'a
Könnte auch eine tatsächliche Antwort mit meiner Lösung geben, die von Peter Liljenbergs inspiriert wurde:
$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%
Dies verwendet awk
, um 100 abzüglich des 12. Feldes (Leerlauf) mit einem Prozentzeichen danach auszudrucken. awk
tut dies nur für eine Zeile, in der das 12. Feld nur Zahlen und Punkte enthält ($12 ~ /[0-9]+/
).
BEARBEITET: Mir ist aufgefallen, dass in der Antwort eines anderen Benutzers% idle Feld 12 anstelle von Feld 11 war. Die awk wurde aktualisiert, um zu berücksichtigen, dass das Feld% idle variabel ist.
Dies sollte Ihnen die gewünschte Ausgabe bringen:
mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }'
Wenn Sie eine einfache Ganzzahlrundung wünschen, können Sie printf verwenden:
mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d%%",100 - $field) }'