Como posso receber estatísticas de CPU de alto desempenho do shell?

12

Estou tentando obter uma leitura precisa da CPU usada (em porcentagem) em top . Este é o comando que estou executando para teste:

top -n1 | awk '/Cpu\(s\):/ {print $2}'

Isso retorna:

10.7%us,

Qual é o dado adequado que eu quero. No entanto, toda vez que eu executo o comando, recebo a mesma saída, embora eu esteja aplicando cargas diferentes no meu sistema (e para não mencionar htop me diz que meu uso é diferente). Parece que sempre que inicio top , meu uso da CPU é o mesmo. Somente depois de alguns quadros, isso me dá valores adequados.

Não parece que eu possa analisar a saída do top dessa maneira, então estou procurando outras aplicações confiáveis que me darão uma leitura precisa do shell. Eu realmente gosto de como htop pode me dar uma leitura por núcleo.

Eu tentei iostat e mpstat , mas eles parecem fornecer valores imprecisos e "lentos para alterar".

    
por n0pe 17.12.2011 / 21:22

4 respostas

12

Eu uso este script (de este tópico nos quadros do Arch ):

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))
    
por 17.12.2011 / 22:04
6

Confira sar também. As implementações podem variar muito de nix para nix, mas devem fornecer estatísticas básicas do sistema, em determinados instantâneos. Não tenho certeza de como os valores são precisos no momento em que o comando é inicializado pela primeira vez, mas você pode se divertir para ver como ele se compara a top , iostat , etc.

A saída é baseada em colunas, como top, então você deve ser capaz de canalizar a saída para awk ou cut para manipular os resultados.

    
por 17.12.2011 / 22:05
3

Você já olhou para collectl ? É útil porque você pode adaptar a saída às suas necessidades. Veja: link

    
por 14.04.2012 / 17:52
0

O que eu encontrei é semelhante à pessoa que fez a pergunta acima, pelo menos no CentOS 6. Se eu rodar top no modo batch por apenas uma iteração, parece que ele coleciona o mesmo valor, quase como se sua tendência fosse comece com o que ele lembra da última exibição. Top parece precisar acumular pelo menos alguns números para conseguir que os deltas lhe dêem porcentagens corretas. Tendo testado mais de 10 iterações, descobri que a segunda figura que apareceu mostrou diferenciação suficiente em cada execução. Então, é fácil o suficiente para obter essa linha via

top -b -n 2 | grep Cpu | tail -1

Eu gosto de incorporar isso com tempo de atividade para carregar e um filtro grep de processos selecionados do ps, como consultas postgres. Um monitor muito simples pode ser expresso com o alias:

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
    
por 22.03.2016 / 20:35