Rastreando a média de carregamento

4

A "média de carga" em uma máquina * nix é o "comprimento médio da fila de execução", ou em outras palavras, o número médio de processos que estão fazendo algo (ou esperando para fazer alguma coisa). Embora o conceito seja simples o suficiente para entender, solucionar o problema pode ser menos direto.

Aqui estão as estatísticas em um servidor que eu trabalhei hoje que me fez pensar a melhor maneira de consertar esse tipo de coisa. Aqui estão as estatísticas:

  • 1 GB de RAM livre, 0 uso do espaço de troca
  • CPU vezes em torno de 20% do usuário, 30% espera, 50% ocioso (de acordo com o topo)
  • Cerca de 2 a 3 processos em estado "R" ou "D" por vez (testado com ps | grep)
  • Logs do servidor livres de qualquer mensagem de erro que indique problemas de hardware
  • Carga média em torno de 25,0 (para todas as 3 médias)
  • Servidor sem resposta para usuários

Eu finalmente "consertei" o problema reiniciando o MySQLd ... o que não faz muito sentido, porque de acordo com o comando "show processlist" do mysql, o servidor estava teoricamente ocioso.

Quais outras ferramentas / métricas eu devo ter usado para ajudar a diagnosticar esse problema e, possivelmente, determinar o que estava causando o carregamento do servidor tão alto?

    
por tylerl 25.11.2009 / 20:40

5 respostas

7

Parece que o seu servidor está vinculado a E / S - por isso, os processos ficaram em D state.

Use iostat para ver qual é a carga nos seus discos.

Se o MySQL estiver causando muitas buscas em disco, considere colocar seus dados do MySQL em um disco físico completamente separado. Se ainda for lento e fizer parte de uma configuração mestre-escravo, coloque os logs de replicação em um disco separado também.

Note que uma partição separada ou disco lógico não é suficiente - os tempos de busca da cabeça são geralmente o fator limitante, não as taxas de transferência de dados.

    
por 25.11.2009 / 21:03
3

Voltando a isso seis anos depois, percebi que nenhuma resposta aqui é útil. Aqui está, de longe, a maneira mais simples de ver o que está contribuindo para sua média de carga no Linux:

# View processes and threads affecting load average
ps auxH | grep -v "  S"

O motivo pelo qual você pode obter uma média de carga de 25 com apenas 3 processos em execução é porque cada thread conta individualmente para a média de carregamento. A opção H para ps exibe encadeamentos como se fossem processos.

    
por 20.04.2015 / 05:55
2

Ter uma média de carga de 25 e apenas 2-3 processos que estão solicitando um som da CPU um pouco estranho. Uma carga de 25 significa que há constantemente 25 Processos em seu sistema que estão no estado Em Execução (R) ou Ininterrupta (D). Alguns comentários comentam que os threads que não são mostrados no ps aux são contados como um processo ativo na fila de execução. Você pode ver Thread com ps axms. Depende do sistema usado como eles são contados exatamente na carga.

Mas o que é realmente importante saber. A carga não tem absolutamente nada a ver com a utilização da CPU. Se cada um desses processos usar apenas 1% da CPU e, em seguida, bloquear, você também terá uma carga média de 25.

Então, meu palpite é que, no momento em que sua carga chega a 25, você tem muitos processos que precisam de io e não recebem. Então eles bloqueiam e estão aguardando entrada ou acesso de gravação. Todos eles aterrissam na fila de execução e sua carga o empurra para cima.

Se você tiver apenas 2-3 processos ativos, atente-se aos tópicos. Seu sistema só pode atingir uma média de carga de 25 se os processos e / ou threads estiverem na soma 25 em um determinado período de tempo.

Se isso é constante, você tem um problema. Se isso ocorrer apenas uma ou duas vezes por dia, atente para os cronjobs caros do IO e modifique o tempo que eles são executados.

Além disso, outro problema pode ser um script ou programa que inicia 25 threads ou processos em um determinado momento e esses processos ou threads estão bloqueando uns aos outros. Eu acho que você utilização da CPU no momento determinado é muito alto também e o sistema não satisfaz todos os pedidos que são solicitados neste momento.

Se você tiver um kernel > 2.6.20 Sugiro iotop over vmstat. A iotop mostra o I / O curativo do sistema em um top view em tempo real. Talvez isso te ajude.

Outra ótima ferramenta para mostrar o uso e os processos da CPU é htop. Ele mostra a utilização da CPU de cada cpu como um pequeno gráfico, todas as três cargas + barra gráfica de mem e espaço de troca usados atualmente.

    
por 26.11.2009 / 01:29
1

Você não ficou sem espaço, né? Você não menciona nenhum problema hardware , muito RAM livre, etc. Não há mais espaço livre (talvez em / var?) Ou seu banco de dados mysql está montado em uma unidade remota e há problemas de rede.

    
por 25.11.2009 / 21:54
1

Em situações como esta, gosto de ter Munin , ou similar, monitorar o servidor em questão. Dessa forma, você obtém um histórico, apresentado em forma de gráfico, que pode muito bem dar boas dicas em qual área a carga começou a se manifestar originalmente. Além disso, uma instalação padrão do Munin vem com um bom conjunto de testes pré-programados.

    
por 25.11.2009 / 22:17