Exibir o uso de núcleos de CPU em porcentagem sem usar o topo

0

Estou usando o java para executar um comando no linux. Desde top é um comando interativo e precisa pressionar 1 para obter as informações de todas as cpu (s), então eu não posso usar isso. Então, eu estou usando o seguinte comando para obter as informações de cpu (s):

cat /proc/stat|grep "^cpu[0-9]* ";sleep 3;cat /proc/stat|grep "^cpu[0-9]* "

Estou obtendo a saída como:

cpu  4673683 193 832132 1544221346 142352 1220 171760 0 0
cpu0 2473973 90 524817 769734476 73628 1124 158588 0 0
cpu1 2199709 103 307315 774486870 68723 95 13171 0 0
cpu  4673683 193 832133 1544221744 142352 1220 171760 0 0
cpu0 2473974 90 524817 769734674 73628 1124 158588 0 0
cpu1 2199709 103 307315 774487069 68723 95 13171 0 0

Agora, meu problema é como obter a porcentagem dele, conforme o comando principal está sendo exibido.

 Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    
por user1188867 11.08.2015 / 07:28

2 respostas

1

Experimente o utilitário mpstat do pacote sysstat :

mpstat -u -P ALL

Saída no host do CentOS (host virtual com 1 cpu virtual):

Linux 3.10.0-229.4.2.el7.x86_64 (testhost.testdomain)   08/11/2015  _x86_64_    (1 CPU)

10:03:57 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:03:57 AM  all    0.21    0.05    0.29    0.04    0.00    0.13    0.00    0.00    0.00   99.28
10:03:57 AM    0    0.21    0.05    0.29    0.04    0.00    0.13    0.00    0.00    0.00   99.28

Saída no host do Ubuntu:

Linux 3.13.0-24-generic (myhost)    11-08-15    _x86_64_    (4 CPU)

10:05:37     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:05:37     all    3,34    0,04    1,16    0,13    0,08    0,00    0,00    0,00    0,00   95,25
10:05:37       0    2,81    0,06    1,93    0,13    0,11    0,00    0,00    0,00    0,00   94,96
10:05:37       1    3,94    0,03    0,78    0,10    0,03    0,00    0,00    0,00    0,00   95,13
10:05:37       2    3,31    0,02    1,21    0,16    0,07    0,00    0,00    0,00    0,00   95,24
10:05:37       3    3,31    0,05    0,73    0,14    0,10    0,00    0,00    0,00    0,00   95,68
    
por 11.08.2015 / 10:03
0

Pode ser assim:

 top -b -n 1 | grep -i "^cpu"

A seguir, a saída na minha máquina:

wbzz@mambet:~$ top -b -n 1 | grep -i "^cpu"
Cpu0  : 10.5%us,  4.5%sy,  0.0%ni, 82.4%id,  1.6%wa,  0.0%hi,  1.0%si,  0.0%st
Cpu1  : 44.5%us, 15.0%sy,  0.0%ni, 40.2%id,  0.2%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu2  : 43.8%us, 18.1%sy,  0.0%ni, 37.7%id,  0.1%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu3  : 45.1%us, 14.5%sy,  0.0%ni, 40.3%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st

Isso funciona no slackware-current. Na máquina do CentOS, é necessário alterar a expressão do grep para:

top -b -n 1 | grep -i "^%cpu"
    
por 11.08.2015 / 09:12