it-swarm-pt.tech

O que pode fazer com que o Apache HTTPD use 100% da CPU indefinidamente

Um aplicativo executando um Apache HTTPD 2.0 com carga leve ocasionalmente teve problemas onde um (ou mais?) Dos processos do Apache consumiu 100% da CPU. Atualmente, executamos HTTPD 2.2, talvez tenhamos visto isso com o 2.2 também. Não tenho certeza. Em alguns casos, o uso da CPU bloqueou tudo, exceto o acesso do console ao servidor Windows que hospeda HTTPD. Eu nunca fui capaz de rastrear o que pode levar o Apache a fazer isso.

O ambiente é Apache HTTPD servindo diretamente a conteúdo estático, usando mod_rewrite, mas não muito mais configuração personalizada. HTTPD está se comunicando com o Apache Tomcat (5.x) via mod_jk (1.2.25).

Alguém mais encontrou isso e resolveu? A solução alternativa que instalamos é limitar cada subprocesso Apache HTTPD a um número máximo de solicitações com a seguinte configuração:

MaxRequestsPerChild 1000

onde, como o aplicativo usa HTTP/1.1, isso representa realmente mais de 1000 solicitações por processo filho e mais como 100.000 solicitações por processo filho.

3
Eddie

É mais provável que o travamento esteja acontecendo em um módulo, e não no próprio Apache. Sua configuração parece mínima, então eu suspeito que mod_jk como o culpado. Se limitar MaxRequestsPerChild corrige o problema, então eu diria que é uma solução alternativa aceitável. É possível que um bug no módulo só seja acionado depois de muito tempo ou de muitas solicitações e, a menos que você esteja realmente interessado em rastreá-lo, fazê-lo desaparecer é provavelmente o suficiente.

Se você deseja rastreá-lo, a primeira coisa a fazer é configurar CoreDumpDirectory para apontar para algum local onde o usuário do servidor possa escrever. Se você conseguir fazer com que o processo ofensivo deixe um arquivo principal para trás, isso deve ajudá-lo a rastrear a causa do problema. Você pode encontrar algumas dicas sobre como fazer isso no Apache Debugging Guide .

5
John Dalton

Quando vi isso, foi porque: - um aplicativo ou script hospedado está causando o problema. Por exemplo, ele tem um loop infinito ou algo assim - o sistema operacional tornou-se instável devido a um travamento ou algum outro problema em que reiniciar temporariamente resolveu o problema.

Minha sugestão: - reinicie a máquina. - espere para ver se isso acontece novamente - reinicie o servidor sem mods, etc. - Comece a ligar cada mod um por um e a cada vez observe o uso.

2
cbrulak

instalar mod_proctitle para Apache

1
dims

Na verdade, já vi isso acontecer quando você tem um diretório de log que não existe. Não sei por que eles não lidam com isso melhor, mas você pode querer ter certeza de que todos os diretórios de log estão lá e o processo pode gravar neles.

1
carson

RLimitCPU nem sempre ajuda porque nem todas as partes do código Apache têm verificações para ele.

MaxRequestsPerChild também pode não ajudar, já que vi isso com filhos relativamente 'novos'.

No meu caso, suspeito que seja algo a ver com o módulo que estamos usando (mod_Perl) e talvez com uma conexão de soquete quebrada. Parece que só vemos esse problema com a conexão de navegadores, não com wget ou curl (que usamos muito para 'entrega de dados').

1
ericslaw

Limitar MaxRequestsPerChild ajudará no uso de memória, mas não deve afetar a CPU da maneira que você está falando. O que provavelmente está acontecendo é que seu mod_jk está travando e, como é um módulo Apache, ele aparece no processo httpd.

1
reconbot