O Apache causa uma carga ridícula no servidor

2

Eu tenho o apache2 em execução em um servidor.
Hoje houve muitos pedidos de HTTP (mas não incomuns) e de alguma forma a média de carga subiu para mais de 200 (!!!). Obviamente, o site estava inativo (não acessível).

Pararoapachelevariaaumaquedarelativamenterápidanacarga,masassimqueeucomeceinovamente,acargaultrapassou100emsegundos.
OqueéestranhoéqueacargadetrabalhodaCPUedoMEMeranormaloubaixa,comoseosistemanão"percebesse" que havia muitos processos para manipular.

O que é ainda mais estranho é que, de repente, a carga da CPU foi para 100% em todos os núcleos:

A partir daí, a carga voltou ao normal (< 1) em minutos e o site ficou novamente acessível de repente.

Eu realmente não consigo me explicar esse tipo de comportamento. Alguém pode me ajudar a evitar isso no futuro?

    
por horen 09.01.2013 / 13:12

4 respostas

4

Duas estimativas loucas:

1) A raiz do documento é servida por NFS ou algum outro sistema de arquivos de rede, ou um sistema de arquivos em cluster, que está respondendo lentamente ou não é de todo.

2) Seu Apache (e scripts PHP ou qualquer outro) estão esperando pelo banco de dados ou algum outro recurso externo.

Meu primeiro palpite seria 1) desde que tudo voltou ao normal em um pico muito curto. Se for esse o caso, verifique sua rede ou o servidor de arquivos.

    
por 09.01.2013 / 17:42
1

Em complemento ao primeiro palpite de @Janne Pikkarainen,

Além disso, verifique as mensagens do log de erros, especialmente a padrão, se você tiver vários arquivos de log em virtualhosts, sobre (internal dummy connection) assinaturas. detalhes aqui

Em algumas versões do apache2, essas mensagens sinalizam as conexões internas do apache configuradas para impor recargas ou coletas de lixo. Eles são enviados para todos os filhos vivos e gerenciados pelo virtualhost padrão (o primeiro do apache2-S). Se o host virtual padrão exigir muitos recursos, esse pico repentino também poderá produzir efeitos tão ruins, não apenas o log de lixo.

se o seu NFS ou banco de dados - ou qualquer outra coisa de bloqueio - for atingido por teses, uma solução fácil é ter um virtualhost padrão falso real (o "funciona" um).

    
por 10.01.2013 / 15:34
1

O prefork MPM é ridiculamente inadequado para uma implantação de produção de alto desempenho. A inicialização de processos extras é muito cara e cada processo (thread) pode levar até 30 MB facilmente.

Em vez disso, considere usar o MPM worker ou (ao executar um apache moderno) o Event MPM.

Pode-se aumentar trivialmente o número de threads por um fator de 10 com a mesma pegada de memória.

    
por 10.01.2013 / 15:46
0

Dê uma olhada na sua configuração do Apache e preste atenção às seguintes diretrizes:

A configuração padrão para esses pode não ser apropriada. Este foi o caso para mim, e resultou no Apache usando muita memória quando o servidor foi atingido mais do que o habitual. Meu problema foi resolvido reduzindo os valores deles.

Certifique-se de entender a configuração do seu Production Apache - os padrões estão lá para testes.

    
por 10.01.2013 / 12:45