Eu tenho um pequeno VPS Debian hospedado pela Rackspace executando meu servidor web pessoal. Nas últimas semanas, houve vários momentos em que o Apache (estou executando o 2.2.16) parece estar travado indefinidamente. Reiniciar o Apache /etc/init.d/apache2 restart
resolve o problema até que aconteça novamente. Por causa disso, tenho certeza de que não há problema com o DNS ou com a configuração do diretório virtual (nenhuma delas mudou muito antes de isso começar a acontecer).
Às vezes, apenas páginas dinâmicas envolvendo PHP e MySQL são afetadas, e páginas HTML estáticas demoram para carregar; outras vezes, todas as páginas ficam suspensas indefinidamente até eu reiniciar o Apache. Se eu tiver uma guia aberta no Chrome, depois de um tempo de suspensão, poderá ocorrer um erro com ERR_CONNECTION_ABORTED; se eu reiniciar o Apache, ele para de carregar com ERR_CONNECTION_RESET.
Não há nada /var/log/apache2/error.log
além de rastreadores da web em busca de arquivos que não existem. A princípio pensei que fosse um problema de RAM (256 MB, sou barato, mas o tráfego é da ordem de algumas centenas de acessos por dia, principalmente rastreadores da web), mas o swap está longe de estar cheio, os processos do Apache estão ociosos, e embora haja muito pouca memória livre, é praticamente o mesmo depois de carregar algumas páginas após a reinicialização do Apache. O desempenho é aceitável quando está funcionando, só preciso descobrir o que está causando o travamento após alguns dias de atividade.
Tentei reduzir MaxClients e aumentar MaxRequestsPerChild, mas não ajudou:
<IfModule mpm_prefork_module>
StartServers 2
- MinSpareServers 2
- MaxSpareServers 4
- MaxClients 10
- MaxRequestsPerChild 200
+ MinSpareServers 1
+ MaxSpareServers 2
+ MaxClients 4
+ MaxRequestsPerChild 2000
</IfModule>
(Essas configurações, antigas e novas, e baseadas em pesquisas no Google - há muitas informações conflitantes sobre o que constitui uma configuração razoável.)
Alguma ideia de como posso descobrir o que está acontecendo? Onde estão os bons lugares para procurar um possível impasse?
Pergunta lateral: como o VPS em si está bom, existe algum cronjob que eu possa executar localmente que me alertará quando o Apache começar a se comportar mal? (Não preciso de um serviço pesado de monitoramento externo como o Pingdom.)