Obtendo o uso da CPU todas as vezes.

13

Quando executo o comando a seguir para obter o uso da cpu, recebo um bom uso da CPU do usuário.

top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' 

Saída:

14.5

Aqui eu estou ficando problema é que a saída depende do comando de topo, portanto, não muda instantaneamente como comando de topo. Então eu não estou recebendo cpu correto instantaneamente. Dá a mesma saída e não muda.

Eu quero obter CPU em tempo real na saída. Por favor me ajude a melhorar meu comando.

    
por Ketan Patel 26.03.2013 / 10:28

7 respostas

12

Você está certo, top parece dar uso incorreto da CPU na primeira iteração. Você pode contornar esse problema assim:

top -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'

Isso, é claro, levará o dobro do tempo, mas funcionará de qualquer maneira.

Se você ainda deseja que ele funcione mais rápido, use a opção -d , por exemplo, por um período total de medição de 1 segundo, use metade dele:

top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'
    
por 28.06.2013 / 11:29
6

Tecnicamente, o primeiro top nem sempre produz o mesmo valor; apenas mostra a carga média da CPU desde a última inicialização. Como top usa o delta de /proc/stat stats para calcular a carga da CPU, o primeiro valor é calculado ao comparar com zero, gerando resultado incorreto (mas WAD).

Se você não quiser usar top , poderá analisar diretamente /proc/stat :

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5) "%"}'

Também é mais rápido e preciso dessa forma.

Você pode testá-lo com stress :

stress -c 1 -q &

E faça

killall stress

depois.

    
por 12.05.2015 / 09:56
5

Apenas para expandir a resposta do @Ruslan, top divide o uso da CPU entre usuário, processos do sistema e nice processos, queremos a soma dos três. Assim, podemos executar o modo top in b atch, o que nos permite analisar sua saída. No entanto, como explicado aqui , a primeira iteração de top -b retorna as porcentagens desde a inicialização, portanto, precisamos pelo menos duas iterações ( -n 2 ) para obter a porcentagem atual. Para acelerar as coisas, você pode definir o d elay entre as iterações para 0.01 :

top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
    
por 16.09.2013 / 17:33
4

Talvez use este baseado na ps output:

ps aux  | awk 'BEGIN { sum = 0 }  { sum += $3 }; END { print sum }
    
por 26.03.2013 / 12:35
0

Use o comando watch ou para loop no shell,

ou seja, watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \ + \}'"

    
por 26.03.2013 / 10:41
0

Por que você se preocupa com o uso da CPU? A média de carregamento é um indicador muito melhor:

cat /proc/loadavg

Se você realmente precisa do uso da CPU, analisar /proc/stat provavelmente é o caminho a ser seguido.

    
por 16.09.2013 / 19:21
-2

Usando o comando sar

sar 1 10

Isso significa: obter 10 vezes o resultado em cada segundo

    
por 17.09.2013 / 06:24