Linux Tutorial · 4 min read · Oct 16, 2025

Come Estrarre Valori Da top E Tracciarli

Come Estrarre Valori Da top E Tracciarli

Di: Showayb Zahda+

Molti ricercatori che stanno facendo valutazioni delle prestazioni e benchmarking hanno bisogno di catturare i valori della CPU e della RAM. Altri potrebbero aver bisogno di catturare anche il throughput. In questo breve tutorial mostrerò come catturo i valori della CPU e della RAM da “top” e poi li estraggo in un comando su una sola riga.

Per catturare e memorizzare l’output di top, usa la modalità batch “top -b”. Top per impostazione predefinita aggiorna la sua lettura ogni 10 secondi. Tuttavia, alcuni ricercatori hanno bisogno dei valori ogni secondo. Bene, è facile, basta passare il parametro d, il comando diventa “top -b -d 1”. 1 qui è un secondo. Questo comando catturerà l’output di top ogni secondo. Ma non è ancora finita. Devi memorizzarlo. È facile, basta reindirizzare l’output a un file:

top -b -d 1 > top.txt

Dopo aver terminato il tuo esperimento non dimenticare di fermare top premendo “ctrl + c”. Ora hai il file che ha un’enorme quantità di righe e ciò di cui hai bisogno è solo una parte di una riga. Fortunatamente, il formato dell’output è fisso e questo rende molto facile estrarre i valori.

Di seguito è riportata una parte di uno dei secondi di top. Guardando l’output puoi vedere che c’è una riga che inizia con Cpu(s). e la riga seguente è Mem:. In effetti, abbiamo bisogno solo di parte di queste righe e non di tutte. Quindi come fare?

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

Se non sei familiare con Linux, le cose potrebbero sembrare strane per te, ma comunque, usa i comandi che fornirò e porta a termine il tuo lavoro. I comandi che utilizzerò sono qui, cat, grep, cut, nl. Li uso con il piping in modo che tutto sia un comando su una sola riga. :)

cat top.txt | grep Cpu

Questo comando mostrerà qualcosa di simile al seguente:

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, questa è magia. Bene, consideralo se ti piace. Comunque, come puoi vedere, ogni riga della CPU rappresenta la lettura della CPU in un secondo. Ma diciamo che ho bisogno del valore inattivo di questa riga che è, per esempio, “68.1%id,”. Bene, ora arriva il turno del taglio. Il comando cut taglia i dati in un file o nell’output standard in base al numero di colonna. Il numero di colonna è il numero del carattere in una riga. Tutto conta uno, cioè % è uno, lo spazio è uno, 5 è una colonna. Quindi, come contare, puoi usare qualsiasi editor di testo e leggere in fondo all’editor il numero di colonna oppure puoi farlo manualmente.

Usando l’editor di testo ho trovato che la colonna 35 a 39 è il numero che rappresenta il valore inattivo. Quindi come tagliarlo. Continuiamo con il nostro comando:

cat top.txt | grep Cpu | cut -c 35-39

L’output è il seguente:

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, un’altra magia. Va bene. cut -c 35-39 significa tagliare le colonne da 35 a 39 dall’input e stamparle nel terminale. Quindi, se vuoi catturare la parte %us. Basta contare le colonne e sostituirle. Ricorda che abbiamo catturato i valori ogni secondo. Quindi, come aggiungere i secondi, è facile, usa nl: numero di riga:

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

Bene, se catturi top ogni 3 secondi puoi fare questo:

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, questo è fantastico anche. Ora basta reindirizzare l’output a un file:

cat top.txt | grep Cpu | cut -c 35-39 | nl > cpu.txt

Prendi il file per gnuplot o qualsiasi altro software di tracciamento e divertiti.

Per la parte Mem. Suppongo sia il tuo turno di farlo seguendo gli stessi passaggi ma cambiando i parametri.

Saluti
Showayb A A Zahda
[email protected]

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.