Qual a relação do load apresentado no sistema operacional em uma máquina? 1.0 é bom? 8.0 é alto? Como saber o valor ideal? Devemos seguir a ideia de quanto menor o valor é melhor e quanto maior é pior?
Definitivamente a literatura não é clara quando queremos saber detalhes sobre o “Load Average” (chamarei aqui de LA) e isso gera muitas dúvidas e conceitos errados. Neste post abordarei de uma forma simples este assunto que assombra muitos administradores de TI.
Vejamos o exemplo do LA mostrado via comando htop:
No Load Average acima temos 0.41, 0.47 e 0.50.
OK, mas o que estes números realmente significam?
Abaixo temos uma explicação interessante sobre o significado do LA, retirada da RFC546:
Traduzindo: Load Average é a medida da demanda de CPU.
Ou seja, este número representa uma média de demanda do CPU dentro do período de 1 min, 5 min e 15 min, comparado com a quantidade de processos existentes e capacidade de processamento. No exemplo acima sabemos que a média do LA dos últimos 15 minutos é de 0.50. E do último minuto 0.41. Ou seja, dá para concluir que a demanda do CPU está diminuíndo.
Antigamente (nos kernels mais antigos) o load da máquina era calculado apenas com base nos processos que estavam especificamente no status runnable. Ou seja, processos que estão, de fato, sendo executados no processador. Aí se criou a famosa frase “Um load de até 1.0 é bom para um processador single-core. Já com um processador quad-core um valor de até 4.0 é bom”. Esta não deixa de ser uma medida, porém não é nada precisa e você já entenderá o motivo.
Existem diversos status possíveis para um determinado processo aberto no servidor. Os principais são:
Você pode verificar estes status de cada processo com o comando top, na coluna “S” (entre SHR e %CPU). Veja que vários estão com o status “S” de interruptible sleep:
É normal que a grande maioria dos processos estejam no status “S”, que são processos que estão “dormindo” até que algum evento ocorra para serem processados e ir para o status “R”. Nossos processadores atualmente são extremamente rápidos, fazendo com que a maioria dos processos no status “R” rapidamente mudem para “S” onde passam a maior parte do tempo.
Como exemplo acima temos o Google Chrome (processo com nome “chrome”). O navegador fica aberto, mas geralmente está aguardando algum evento para ser enviado para o processador e entrar no status “runnable”.
Com o passar do tempo, nos kernels mais novos, também foram adicionados no cálculo do LA os processos com status de uninterruptible sleep, que são os processos que estão aguardando algum tipo de I/O (seja de disco, rede, memória, etc).
Neste momento o LA deixou de ser apenas uma medida da “demanda de CPU” e passou a ser mais uma medida de “demanda do sistema“. Pois se vários processos estiverem aguardando disco ou memória ou rede ou CPU, o load terá um valor alto. Ou seja, se um servidor tiver muitos processos aguardando disco, você terá um alto valor de LA e possivelmente um baixo processamento.
Resumidamente um valor do LA alto, de forma isolada, é apenas um indicativo – um alerta amarelo – de que algo pode estar errado com seu sistema operacional ou hardware, devendo ser analisado com outras ferramentas para descobrir o que está causando um valor alto.
Por exemplo: Um disco com problemas de I/O pode causar um alto valor de load e um baixo consumo de CPU.
Portanto, obrigatoriamente, se faz necessário realizar uma análise em conjunto com outras ferramentas para definir se o valor é ou não um indicativo de anormalidade específica de CPU ou se existem outros fatores envolvidos.
Fonte:
http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html
https://tools.ietf.org/html/rfc546
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages