Estou procurando sugestões sobre onde devo me aprofundar.
Em breve, o servidor Apache2 para de atender solicitações após 2 a 15 horas após ser iniciado. Como resultado, tenho que fazer service apache2 restart
cada meio dia.
Versão longa:
- Estou executando alguns sites (Apache 2.2.22 construído em 12 de julho de 2013) a partir de um servidor dedicado (Ubuntu 13.04).
- O servidor Apache2 estava se comportando bem por mais de meio ano, agora de repente ele para de processar solicitações em todos os sites (tendo cerca de 5 sites) até que o processo do Apache seja reiniciado.
- Não consegui encontrar nenhum log anormal em /var/log/apache em relação ao problema.
service apache2 status
relata que o processo está em execução
Ficarei feliz em ouvir suas sugestões e o que devo fazer na minha situação.
ATUALIZAR:
Correndo netstat -an | grep 80
:
tcp6 0 0 :::80 :::* LISTEN
tcp6 325 0 SERV_IP:80 IP_A:35514 CLOSE_WAIT
tcp6 332 0 SERV_IP:80 IP_B:34198 CLOSE_WAIT
tcp6 379 0 SERV_IP:80 IP_C:57859 CLOSE_WAIT
tcp6 0 0 SERV_IP:80 IP_A:35060 CLOSE_WAIT
tcp6 360 0 SERV_IP:80 IP_A:38481 CLOSE_WAIT
tcp6 466 0 SERV_IP:80 IP_B:56324 CLOSE_WAIT
tcp6 361 0 SERV_IP:80 IP_A:53466 CLOSE_WAIT
tcp6 1 0 SERV_IP:80 IP_A:38102 CLOSE_WAIT
tcp6 196 0 SERV_IP:80 IP_E:58125 ESTABLISHED
e mais entradas como essas, cerca de 150 delas.
ps aux | grep apache
:
root 2968 0.0 0.0 452240 21116 ? Ss 16:08 0:01 /usr/sbin/apache2 -k start
www-data 5217 0.0 0.0 463584 23820 ? S 17:04 0:03 /usr/sbin/apache2 -k start
Existem cerca de 120 linhas posteriores (www-data), então presumo 120 processos apache?
Usando strafe
no processo raiz do Apache2:
sudo strace -f -p 2968
Process 2968 attached - interrupt to quit
select(0, NULL, NULL, NULL, {0, 264394}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
Usando em um dos processos www-data:
sudo strace -f -p 8554
Process 8554 attached - interrupt to quit
flock(40, LOCK_EX
Uau, parece-me que de alguma forma os processos do Apache travaram e, uma vez excedido o limite máximo de conexão, ele para de criar novas instâncias. Mas por que eles ficam presos?
htop, iotop, jnettop não relatam nenhuma anomalia. (sem sobrecarga)
UPDATE2: O servidor não está mais travando nos últimos dois dias. Portanto, não consigo obter mais informações. Em vez disso, agradeço sua ajuda e aceito a resposta. Assim que mais informações estiverem disponíveis, deixarei um link para uma nova pergunta com corpo melhor construído. Obrigado
Responder1
Não importa quais relatórios de "status do serviço apache2", você vê processos do apache quando faz ps aux?
Você pode fazer um netstat -n quando o problema ocorrer? Talvez você fique sem recursos, por exemplo, descritores de arquivo, você pode ter muitas conexões abertas.
Durante o problema você tem alta utilização da CPU? Talvez o sistema fique sem memória e esteja se debatendo?
O servidor http responde com conexão recusada ou a conexão atinge o tempo limite?
Neste último caso, sugiro fazer strace -f -p [apachepid] e você poderá descobrir qual chamada de sistema está bloqueando a solicitação. No primeiro caso, provavelmente o apache travou.
Você faz proxy do Tomcat ou de outro servidor de aplicativos ou serve HTML estático simples?
Você configurou a autenticação? por exemplo, talvez algo dê errado na camada de autenticação
ATUALIZAR:
No segundo strace eu vejo este rebanho(40,LOCK_EX Talvez os processos tentem obter um bloqueio exclusivo em algum lugar? você pode fazer lsof -n -p 8554 (ou qualquer pid que tente flocar) e ver qual arquivo ele tenta bloquear (40 é o descritor do arquivo). você também pode "ls /proc/8554/fd"