Obtendo o uso da CPU em tempo real

9

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  + }' 

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 usar a CPU em tempo real na saída. Por favor me ajude a melhorar meu comando.

    
por Ketankumar Patel 28.03.2013 / 08:40

4 respostas

16

Se você puder pagar um atraso de um segundo, isso imprimirá o uso da CPU como uma porcentagem simples:

echo $[100-$(vmstat 1 2|tail -1|awk '{print }')]

(Sem o atraso de um segundo, vmstat só pode imprimir em média valores desde a inicialização.)

    
por Paul 21.05.2013 / 00:15
6

Este é um problema conhecido com top . Como explicado aqui , a 1ª iteração de top -b retorna as porcentagens desde a inicialização, portanto, precisamos de pelo menos duas iterações ( -n 2 ) para obter a porcentagem atual. Para acelerar as coisas, você pode definir o d elay entre iterações para 0.01 . top divide o uso da CPU entre usuário, processos do sistema e nice processos, queremos a soma dos três. Por fim, você grep da linha que contém as porcentagens de CPU e, em seguida, usa gawk para somar processos de usuário, sistema e bons:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print ++}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode
    
por terdon 04.01.2014 / 14:18
6

Eu tentei várias maneiras, mas isso parece-me o mais preciso:

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print (-+-)*100/(-+-+-)}'

Entendi aqui

    
por lepe 14.07.2015 / 10:11
0

Use -n2 . Isso produzirá duas linhas. A primeira vez em que top imprime a linha não se qualifica para o estado naquele momento. Em seguida, ajuste seu script para ignorar a primeira linha.

    
por ilp 27.06.2013 / 15:55