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 recebendo 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.
Eu quero obter uso da CPU em tempo real na saída. Por favor me ajude a melhorar meu comando.
command-line
top
Ketan Patel
fonte
fonte
Respostas:
Se você puder pagar um atraso de um segundo, isso imprimirá o uso da CPU como uma porcentagem simples:
(Sem o atraso de um segundo,
vmstat
só é possível imprimir valores médios desde a inicialização.)fonte
vmstat 1 2
assim:echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
caso contrário, vocêvmstat
fornecerá valores desde a inicialização, o que provavelmente não é o que você procura.Esse é um problema conhecido com
top
. Conforme explicado aqui , a primeira iteração detop -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
intervalo entre as iterações para0.01
.top
divide o uso da CPU entre usuário, processos e processos do sistemanice
, queremos a soma dos três. Finalmente, você égrep
a linha que contém as porcentagens da CPU e, em seguida, usagawk
para somar usuário, sistema e processos agradáveis:fonte
top
reportará o% de uso como uma porcentagem de uma única CPU. Isso significa que você geralmente obtém porcentagens muito mais altas. Veja o ponto 9 aqui .top
no modo interativo (apenas executartop
) e, uma vez lá, pressionarI
(shift + i) para ver uma divisão por núcleos.Eu tentei de várias maneiras, mas isso me parece mais preciso:
Entendi daqui
fonte
%.1f
, na minha opinião, é mais legível por humanos e útil se você usar essa saída em outros scripts.Use
-n2
. Isso produzirá duas linhas. A primeira vez quetop
a linha é impressa não se qualifica para o estado naquele momento. Em seguida, ajuste seu script para ignorar a primeira linha.fonte