Linux Tutorial · 4 min read · Oct 16, 2025

Como Extrair Valores do top e Plotá-los

Como Extrair Valores do top e Plotá-los

Por: Showayb Zahda+

Muitos pesquisadores que estão realizando avaliação de desempenho e benchmarking precisam capturar os valores da CPU e da RAM. Outros podem precisar capturar a taxa de transferência também. Neste curto tutorial, vou mostrar como capturo os valores da CPU e da RAM do “top” e, em seguida, extraí-los em um comando de uma linha.

Para capturar e armazenar a saída do top, use o modo batch “top -b”. O top, por padrão, atualiza sua leitura a cada 10 segundos. No entanto, alguns pesquisadores precisam dos valores a cada segundo. Bem, é fácil, basta passar o parâmetro d, o comando se torna “top -b -d 1”. 1 aqui é um segundo. Este comando capturará a saída do top a cada segundo. Mas ainda não acabou. Você precisa armazená-lo. É fácil, basta redirecionar a saída para um arquivo:

top -b -d 1 > top.txt

Depois de terminar seu experimento, não se esqueça de parar o top pressionando “ctrl + c”. Agora você tem o arquivo que contém uma enorme quantidade de linhas e o que você precisa dele é apenas parte de uma linha. Felizmente, o formato da saída é fixo e isso torna a extração dos valores muito fácil.

O seguinte é parte de um dos segundos do top. Olhando para a saída, você pode ver que há uma linha que começa com Cpu(s). e a linha seguinte é Mem:. Na verdade, precisamos de parte dessas linhas e não de todas. Então, como fazer isso.

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 você não está familiarizado com o Linux, as coisas podem parecer estranhas para você, mas de qualquer forma, basta usar os comandos que vou fornecer e concluir seu trabalho. Os comandos que vou usar são aqui, cat, grep, cut, nl. Eu os uso com encadeamento, então tudo será um comando de uma linha. :)

cat top.txt | grep Cpu

Este comando mostrará algo como o seguinte:

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

Uau, isso é mágica. Bem, considere isso se você gostar. De qualquer forma, como você pode ver, cada linha da CPU representa a leitura da CPU em um segundo. Mas digamos que eu precise do valor ocioso dessa linha, que é, por exemplo, “68.1%id,”. Bem, agora vem a vez do corte. O comando cut corta os dados em um arquivo ou saída padrão com base no número da coluna. O número da coluna é o número do caractere em uma linha. Tudo conta como um, ou seja, % é um, espaço é um, 5 é uma coluna. Então, como contar, você pode usar qualquer editor de texto e ler na parte inferior do editor o número da coluna ou pode fazer isso manualmente.

Usando o editor de texto, descobri que a coluna 35 a 39 é o número que representa o valor ocioso. Então, como cortá-lo. Continuamos com nosso comando:

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

A saída é a seguinte:

73.9
72.4
76.6
66.7
70.4
67.2
72.4
63.1
68.1
68.5
70.6
74.0

Uau, outra mágica. Está bom. cut -c 35-39 significa cortar as colunas de 35 a 39 da entrada e exibi-las no terminal. Então, se você quiser capturar a parte %us. Basta contar as colunas e substituí-las. Lembre-se de que capturamos os valores a cada segundo. Então, como adicionar os segundos, é fácil, use nl: número da linha:

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

Bem, se você capturar o top a cada 3 segundos, pode fazer isso:

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

Uau, isso é fantástico também. Agora, basta redirecionar a saída para um arquivo:

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

Leve o arquivo para o gnuplot ou qualquer outro software de plotagem e aproveite.

Para a parte da Mem, eu acho que é sua vez de fazer isso seguindo os mesmos passos, mas mudando os parâmetros.

Saudações
Showayb A A Zahda
[email protected]

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.