Como obter porcentagem de CPU e uso de memória em uma única linha?

5

Como posso obter percentual de CPU e percentual de RAM impressos em uma linha no linux? (Usando cli)

Eu tenho que passar essa string de saída para um display LCD.

Thx muito

    
por Amedeo Baragiola 01.06.2013 / 21:14

2 respostas

3

Use o AWK para analisar a saída da parte superior

top -bn1 | awk '/Mem/ { mem = "Memory in Use: " $5 / $3 * 100 "%" };
                /Cpu/ { cpu = "CPU in Use: " 100 - $8 "%" };
                END   { print mem ", " cpu }'

Isso usará o modo batch do topo para imprimir estatísticas uma vez, que você pode então analisar da maneira que quiser com o awk. Por exemplo, o código acima produziu isso no meu teste:

Memory in Use: 93.866%, CPU in Use: 1.7%

Obviamente, sua saída irá variar. Você também pode ajustar o formato de saída se precisar de mais (ou menos) informações.

    
por 01.06.2013 / 21:31
2

Você pode analisar a saída de alguns dos utilitários do Unix, como vmstat :

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0  75812 282632 115704 891332    0    1    22    54  138  362 15  2 80  2
$ vmstat | sed -n '3s/ \+/\t/gp' | cut -f5,14
280904  15

O texto acima imprime a memória livre e o uso da CPU.

Se você quiser a memória usada , pode usar outro utilitário, como top no modo batch, como sugerido por CodeGnome e por mim em um resposta anterior .

$ top -bn1 | sed -rn '3s/[^0-9]* ([0-9\.]+) .*//p;4s/.*,  ([0-9]+) .*//p' | tr '\n' ' '
10.4 3787340

Ou para obter percentagens , você pode fazer

$ top -bn1 | \
> sed -rn '3s/[^0-9]* ([0-9\.]+) .*//p;4s/[^0-9]*([0-9]+)[^0-9]+([0-9]+) .*/ /p' | \
> { read cpu; read tot used; echo $cpu $(( 100*used/tot )); }
10.3 94

Tenho certeza de que existem soluções mais elegantes.

    
por 01.06.2013 / 21:28

Tags