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:
- reinicie o apache
- espere um pouco (minutos)
- obtenha o processo de "solicitação de leitura" de zumbis, a CPU começa a subir
- mais zumbis entram, todos não coincidindo com nada óbvio
- A carga da CPU aumenta para 15 a 40, dependendo de quando eu a notei pela última vez
- 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