Superior mostrando 64% ocioso na primeira tela ou em lote, enquanto não há tempo ocioso

3

Eu estou executando uma tarefa bastante pesada de processamento de números em alguns servidores de 4 núcleos, todos executando o Ubuntu Precise Pangolin LTS de 64 bits, na nuvem (por isso, suponho em um ambiente virtualizado).

Para monitorar o uso da CPU, eu escrevi um .sh que usa "top -b -n 1" (que é uma única execução de topo, apenas o primeiro "frame") e o mescla com outros dados, para gravar um pequeno relatório.

No entanto, o top sempre relatou 64% de ociosidade na linha do cpus, para cada servidor, mesmo se eu tivesse certeza de que todos os quatro núcleos estavam 100% ocupados.

Na verdade, rodando interativamente, no primeiro quadro ele reporta 64% de tempo ocioso, mas assim que ele é atualizado, reporta dados corretos (quase 0% ociosos).

O vmstat também, na coluna cpu, sempre reporta 64% de tempo ocioso na primeira linha e, em seguida, inicia o relatório (supostamente) de dados reais.

Por que isso? É um bug no top / vmstat ou no kernel? Ou é um efeito colateral conhecido de como cpu% é medido? Por que sempre 64%?

O carregamento da CPU está sempre correto (por volta de 4).

    
por Simone Gianni 09.10.2012 / 16:46

2 respostas

4

Isso ocorre porque top, vmstat e iostat, todos em sua primeira execução, coletam dados desde o último horário de reinicialização do sistema.

E as iterações sucessivas são executadas no período de amostragem especificado. Assim, na primeira execução do top, você verá o% de tempo ocioso porque, desde o momento da reinicialização até o momento da execução, ele ficou com% de inatividade. Mas nas próximas iterações, uma vez que está ocupado, não mostra% de ociosidade.

Exclua a primeira iteração e tente amostrar no intervalo desejado.

    
por 09.10.2012 / 18:28
2

Você pode fazer isso por grep ping na linha que começa com "Cpu (s)" e canalizar o resultado até tail .

top -b -n2 -d 0.1 |grep "Cpu(s)"|tail -n +1

O tail -n +1 descarta a primeira linha (os resultados ruins) e permite apenas que a segunda linha passe. O -d 0.1 significa um atraso de um décimo de segundo entre a primeira e a segunda iteração de top ; -b -n2 significa executar duas vezes no modo batch. A saída final é a única linha contendo os resultados "bons" que você pode usar em um relatório.

Se você precisar de outras linhas além da linha "Cpu (s)", enxágue e repita para cada uma delas.

    
por 15.11.2015 / 02:06