O Apache fica preso enquanto o “pedido de leitura” e o PID recebem 100% da CPU

2

Recentemente, de certa forma coincidindo com alguns upgrades de servidor (embora houvesse uma variedade de coisas que mudaram), o Apache começou a terminar com alguns de seus processos presos no estado de "solicitação de leitura". Cada PID que fica nesse estado ocupa 100% da CPU e tem muito pouco que é consistente com ele e outro processo travado (de acordo com o lsof) - alguns têm conexões TCP / IP abertas, algumas têm espera, outras estão apenas ouvindo www.

O padrão é o seguinte:

  1. reinicie o apache
  2. espere um pouco (minutos)
  3. obtenha o processo de "solicitação de leitura" de zumbis, a CPU começa a subir
  4. mais zumbis entram, todos não coincidindo com nada óbvio
  5. A carga da CPU aumenta para 15 a 40, dependendo de quando eu a notei pela última vez
  6. GOTO 1

Esse ciclo inteiro dura cerca de 30 minutos a 4 horas, dependendo da minha capacidade de executar a etapa 1 de maneira oportuna.

server-status me dá:

R_.__.K._K.._._...._........W...................................
................................................................
................................................................
................................................................

Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process

Srv PID Acc M   CPU     SS  Req Conn    Child   Slot    Client  VHost   Request
0-0 24363   0/1/7   R   0.46    447 844 0.0 0.00    0.26    ?   ?   ..reading.. 
[followed by a bunch of entirely normal requests]

É claro que as principais informações que me ajudariam a depurar isso estão faltando na linha de status do servidor.

Eu não consegui rastreá-lo para nada em particular. Eu tentei lsof, netstat, olhando para logs (embora haja uma tonelada de logs para procurar. Nada óbvio surgiu). Não há picos no tráfego de rede e o servidor está atendendo ativamente a vários sites aleatórios, portanto é difícil monitorar as conexões de entrada.

Originalmente, isso começou a acontecer em uma instalação antiga do Lenny, então comecei a atualizar os pacotes para o Squeeze. Até agora, nenhuma atualização fez com que isso desaparecesse (embora, felizmente, eu esteja adquirindo um software novo e legal!).

Além de começar a depurar o próprio Apache , existem outras coisas que você pode fazer para tentar encontrar o fonte do problema?

Detalhes:

Debian Lenny / Squeeze (principalmente Lenny. Alguns componentes são atualizados para o Squeeze) rodando no Linux 2.6.32-5-xen-amd64 em um host Debian Squeeze Xen.

Apache2 MPM prefork (2.2.16-6 + squeeze7)

Módulos: libapache2-mod-fastcgi, libapache2-mod-perl2, libapache2-mod-php5, libapache2-mod-python, libapache2-mod-scgi, libapache2-mod-wsgi, libapache2-modxslt, libapache2-svn

    
por Steve Pomeroy 20.06.2012 / 00:10

1 resposta

1

Eu recebo o mesmo problema no meu servidor rodando o CentOS 6.2. Eu suspeito que tem algo a ver com a reinicialização graciosa como parte da rotação de log semanal. Quando eu strace o processo de httpd que está tendo 100% de ciclo de CPU, ele está circulando em torno de leitura de seqüências vazias fora de uma alça de cano (STDIN?) Então eu acho que o problema raiz é que o read () deve bloquear e não retornar zero o tempo todo, causando 100% de uso da CPU.

    
por 03.07.2012 / 23:55