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.txt

Nachdem 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 Xorg

Wenn 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 Cpu

Dieser 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%st

Wooow, 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-39

Die 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 | nl

1     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 3
1 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.0

Woow, 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.txt

Nehmen 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]

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.