Estamos nos deparando com um comportamento estranho em que vemos alta utilização da CPU, mas média de carga bastante baixa.
O comportamento é melhor ilustrado pelos gráficos a seguir do nosso sistema de monitoramento.
Por volta das 11h57, a utilização da CPU passa de 25% para 75%. A média de carga não é significativamente alterada.
Executamos servidores com 12 núcleos com 2 hyper threads cada. O sistema operacional vê isso como 24 CPUs.
Os dados de utilização da CPU são coletados executando a /usr/bin/mpstat 60 1
cada minuto. Os dados da all
linha e da %usr
coluna são mostrados no gráfico acima. Tenho certeza de que isso mostra a média por dados da CPU, não a utilização "empilhada". Embora vejamos 75% de utilização no gráfico, vemos um processo mostrando o uso de cerca de 2.000% da CPU "empilhada" em top
.
O valor médio da carga é obtido a /proc/loadavg
cada minuto.
uname -a
dá:
Linux ab04 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
distribuição Linux éRed Hat Enterprise Linux Server release 6.3 (Santiago)
Executamos alguns aplicativos da Web Java sob carga bastante pesada nas máquinas, pense em 100 solicitações/s por máquina.
Se eu interpretar corretamente os dados de utilização da CPU, quando tivermos 75% de utilização da CPU, isso significa que nossas CPUs estão executando um processo 75% do tempo, em média. No entanto, se nossas CPUs estiverem ocupadas 75% do tempo, não deveríamos ver uma média de carga mais alta? Como as CPUs podem estar 75% ocupadas enquanto temos apenas 2 a 4 tarefas na fila de execução?
Estamos interpretando nossos dados corretamente? O que pode causar esse comportamento?