Eu tenho um servidor rodando o apache, e tenho visto processos de apache ocasionais chegarem a 100% e ficarem lá. Hoje, com dois processos em 100%, desativei o acesso externo ao servidor (para evitar mais solicitações ao apache). Cinco minutos depois, nenhum pedido está chegando ao servidor, mas ambos os processos ainda estão em 100%.
Eu executei lsof
em cada processo e eles me deram cerca de 9000 linhas de saída (que podem muito bem ser gregas para mim). Nenhum outro processo parece estar se comportando de maneira estranha ou esperando, etc.
Meu banco de dados está em um segundo servidor. Usando mytop
mostra duas conexões MySQL ativas do servidor apache, ambas com um estado de "suspensão". Eu matei um desses threads do MySQL, e não houve alteração em nenhum processo no servidor Apache.
Esse servidor apache é um dos dois por trás de um balanceador de carga simples. Não sei se isso poderia estar relacionado.
Como posso confirmar se o problema do apache está relacionado ao que estou vendo no servidor de banco de dados? E isso é provável que seja o resultado de uma chamada SQL desonesto ou algo mais?
Editar: encontrou o problema. Foi um problema de código com o Magento. A função de redimensionamento de imagem não estava conseguindo abrir uma imagem, porque a extensão estava incorreta (era um BMP com uma extensão jpg). O manipulador de erro para isso estava chamando o redimensionamento novamente, et voila - um loop. Achei isso fazendo strace
no processo do apache mal-comportado.