Quando executo o seguinte comando para obter o uso da CPU, recebo um bom uso do usuário + da CPU.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
Resultado:
14.5
Aqui estou obtendo o problema é que a saída depende do comando top, portanto, não muda instantaneamente como comando top. Então, eu não estou recebendo a CPU correta instantaneamente. Dá a mesma saída e não muda.
Quero obter cpuusage em tempo real na saída. Por favor me ajude a melhorar meu comando.
command-line
cpu
Ketan Patel
fonte
fonte
time
. No meu sistema, são necessários apenas 0,165s.time (top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' )
Respostas:
Você está certo,
top
parece fornecer uso incorreto da CPU na primeira iteração. Você pode solucionar esse problema da seguinte maneira:Obviamente, isso levará o dobro do tempo, mas funcionará de qualquer maneira.
Se você ainda deseja que ele funcione mais rápido, pode usar a
-d
opção, por exemplo, para um período total de medição de 1 segundo, use metade dela:fonte
Tecnicamente, o primeiro
top
nem sempre gera o mesmo valor; apenas gera a carga média da CPU desde a última inicialização. Comotop
usa o delta de/proc/stat
estatísticas para calcular a carga da CPU, o primeiro valor é calculado ao comparar com zero, produzindo resultados incorretos (mas WAD).Se você não quiser usar
top
, poderá analisar diretamente/proc/stat
:Também é mais rápido e preciso dessa maneira.
Você pode testá-lo com
stress
:E fazer
depois de.
fonte
watch
poderá ser executado:watch -n1 "bash ./cpu"
/proc/stat
é bem legal, mas parece ter a mesma desvantagem da primeira iteração do topo: ele gera a carga média da CPU desde a última inicialização, não a atual.Apenas para expandir a resposta de @ Ruslan,
top
divide o uso da CPU entre usuário, processos e processos do sistemanice
, queremos a soma dos três. Portanto, podemos executartop
nob
modo atch, o que nos permite analisar sua saída. No entanto, conforme explicado aqui , a primeira iteraçãotop -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 od
tempo entre as iterações para0.01
:fonte
Talvez use este baseado na
ps
saída:fonte
Use o comando watch ou for loop no shell,
ie
watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"
fonte
Por que você se importa com o uso da CPU? A média de carga é um indicador muito melhor:
Se você realmente precisa do uso da CPU, a análise
/proc/stat
é provavelmente o caminho a percorrer.fonte
/proc/stat
não fornece o uso da CPU como é, é preciso lê-lo duas vezes com algum tempo entre as leituras e fazer alguns cálculos para obter o uso da CPU. Isto é exatamente o quetop
faz.Usando o
sar
comandoIsso significa: obter 10 vezes o resultado a cada segundo
fonte