Leistung · 4 min read · Oct 16, 2025
Wie man Werte von top extrahiert und sie plottet
Wie man Werte von top extrahiert und sie plottet
Von: Showayb Zahda+
Viele Forscher, die Leistungsbewertungen und Benchmarking durchführen, müssen die Werte der CPU und des RAM erfassen. Andere möchten möglicherweise auch den Durchsatz erfassen. In diesem kurzen Tutorial zeige ich, wie ich die CPU- und RAM-Werte von “top” erfasse und sie dann in einem Einzeiler extrahiere.
Um die Ausgabe von top zu erfassen und zu speichern, verwenden Sie den Batch-Modus “top -b”. Top aktualisiert standardmäßig alle 10 Sekunden seine Werte. Einige Forscher benötigen jedoch die Werte jede Sekunde. Nun, es ist einfach, übergeben Sie einfach den Parameter d, der Befehl wird zu “top -b -d 1”. 1 steht hier für eine Sekunde. Dieser Befehl erfasst die top-Ausgabe jede Sekunde. Aber das ist noch nicht alles. Sie müssen es speichern. Es ist einfach, leiten Sie die Ausgabe in eine Datei um:
top -b -d 1 > top.txtNachdem Sie Ihr Experiment abgeschlossen haben, vergessen Sie nicht, top zu stoppen, indem Sie “ctrl + c” drücken. Jetzt haben Sie die Datei, die eine riesige Anzahl von Zeilen enthält, und was Sie davon benötigen, ist nur ein Teil einer Zeile. Glücklicherweise ist das Format der Ausgabe festgelegt, und das macht das Extrahieren der Werte sehr einfach.
Das Folgende ist ein Teil einer der Sekunden von top. Wenn Sie sich die Ausgabe ansehen, können Sie sehen, dass es eine Zeile gibt, die mit Cpu(s). beginnt, und die folgende Zeile ist Mem:. Tatsächlich benötigen wir nur einen Teil dieser Zeilen und nicht alle. Wie macht man das?
top 18: 54:43 up 4:05, 2 users, load average: 3.64, 2.35, 1.37
Tasks: 135 total, 6 running, 129 sleeping, 0 stopped, 0 zombie
Cpu(s): 19.2%us, 19.7%sy, 0.0%ni, 61.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2054160k total, 2016144k used, 38016k free, 12292k buffers
Swap: 4417864k total, 38360k used, 4379504k free, 1310488k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6929 shuaib 15 0 173m 12m 8940 R 65 0.6 7:22.44 gtkgnash
6916 shuaib 15 0 525m 58m 22m S 6 2.9 0:56.39 totem
5717 root 15 0 491m 87m 12m S 3 4.4 2:13.24 XorgWenn Sie mit Linux nicht vertraut sind, könnte es Ihnen seltsam vorkommen, aber verwenden Sie einfach die Befehle, die ich bereitstelle, und erledigen Sie Ihre Arbeit. Die Befehle, die ich verwenden werde, sind hier, cat, grep, cut, nl. Ich verwende sie mit Pipelining, sodass alles ein Einzeiler ist. :)
cat top.txt | grep CpuDieser Befehl zeigt etwas wie Folgendes:
Cpu(s): 14.3%us, 7.4%sy, 0.0%ni, 73.9%id, 0.0%wa, 0.0%hi, 4.4%si, 0.0%st
Cpu(s): 15.3%us, 7.4%sy, 0.0%ni, 72.4%id, 0.0%wa, 0.0%hi, 4.9%si, 0.0%st
Cpu(s): 11.7%us, 5.4%sy, 0.0%ni, 76.6%id, 2.9%wa, 0.5%hi, 2.9%si, 0.0%st
Cpu(s): 19.6%us, 9.3%sy, 0.0%ni, 66.7%id, 0.0%wa, 0.0%hi, 4.4%si, 0.0%st
Cpu(s): 14.8%us, 9.9%sy, 0.0%ni, 70.4%id, 0.0%wa, 0.5%hi, 4.4%si, 0.0%st
Cpu(s): 16.2%us, 9.3%sy, 0.0%ni, 67.2%id, 0.0%wa, 0.0%hi, 7.4%si, 0.0%st
Cpu(s): 12.3%us, 8.9%sy, 0.0%ni, 72.4%id, 0.0%wa, 0.0%hi, 6.4%si, 0.0%st
Cpu(s): 19.2%us, 11.8%sy, 0.0%ni, 63.1%id, 1.0%wa, 0.0%hi, 4.9%si, 0.0%st
Cpu(s): 16.2%us, 10.3%sy, 0.0%ni, 68.1%id, 0.0%wa, 0.5%hi, 4.9%si, 0.0%st
Cpu(s): 17.7%us, 9.9%sy, 0.0%ni, 68.5%id, 0.0%wa, 0.0%hi, 3.9%si, 0.0%st
Cpu(s): 15.7%us, 9.8%sy, 0.0%ni, 70.6%id, 0.0%wa, 0.0%hi, 3.9%si, 0.0%st
Cpu(s): 13.7%us, 7.4%sy, 0.0%ni, 74.0%id, 0.0%wa, 0.0%hi, 4.9%si, 0.0%stWooow, das ist Magie. Nun, betrachten Sie es, wenn Sie möchten. Wie Sie sehen können, repräsentiert jede CPU-Zeile die Ablesung der CPU in einer Sekunde. Aber sagen wir, ich brauche den Leerlaufwert dieser Zeile, der zum Beispiel “68.1%id,” ist. Nun, jetzt kommt der Schnitt. Der cut-Befehl schneidet die Daten in einer Datei oder der Standardausgabe basierend auf der Spaltennummer. Die Spaltennummer ist die Anzahl der Zeichen in einer Zeile. Alles zählt eins, d.h. % ist eins, Leerzeichen ist eins, 5 ist eine Spalte. Also, wie zählt man, Sie können jeden Texteditor verwenden und unten im Editor die Spaltennummer ablesen oder Sie können es manuell machen.
Mit dem Texteditor habe ich festgestellt, dass die Spalten 35 bis 39 die Zahl darstellen, die den Leerlaufwert repräsentiert. Wie schneidet man es also? Wir setzen unseren Befehl fort:
cat top.txt | grep Cpu | cut -c 35-39Die Ausgabe ist unten:
73.9
72.4
76.6
66.7
70.4
67.2
72.4
63.1
68.1
68.5
70.6
74.0
Woow, noch eine Magie. Es ist in Ordnung. cut -c 35-39 bedeutet, schneiden Sie die Spalten 35 bis 39 von der Eingabe und geben Sie sie im Terminal aus. Wenn Sie den %us-Teil erfassen möchten, zählen Sie einfach die Spalten und ersetzen Sie sie. Denken Sie daran, dass wir die Werte jede Sekunde erfasst haben. Wie fügt man die Sekunden hinzu? Es ist einfach, verwenden Sie nl: nummerieren Sie die Zeilen:
cat top.txt | grep Cpu | cut -c 35-39 | nl1 73.9
2 72.4
3 76.6
4 66.7
5 70.4
6 67.2
7 72.4
8 63.1
9 68.1
10 68.5
11 70.6
12 74.0
Nun, wenn Sie top alle 3 Sekunden erfassen, können Sie dies tun:
cat top.txt | grep Cpu | cut -c 35-39 | nl -i 31 73.9
4 72.4
7 76.6
10 66.7
13 70.4
16 67.2
19 72.4
22 63.1
25 68.1
28 68.5
31 70.6
34 74.0Woow, das ist auch fantastisch. Jetzt leiten Sie einfach die Ausgabe in eine Datei um:
cat top.txt | grep Cpu | cut -c 35-39 | nl > cpu.txtNehmen Sie die Datei zu gnuplot oder einer anderen Plot-Software und genießen Sie.

Für den Mem-Teil. Ich schätze, es ist Ihre Aufgabe, es auf die gleiche Weise zu tun, aber die Parameter zu ändern.
Prost
Showayb A A Zahda
[email protected]
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.