Em um servidor Ubuntu com 1Gb de RAM, um servidor Apache 2.4.7 com configuração padrão foi iniciado para ocasionalmente parar de responder à solicitação. É usado para uma nuvem pessoal + outras necessidades e um site de baixo tráfego.
Um exame error.log revelou esse padrão que parece recorrente toda vez que o problema aparece:
[mpm_prefork:error] [pid 31950] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
após o qual access.log
não registra nenhum acesso.
Então um dia depois:
[mpm_prefork:notice] [pid 31950] AH00171: Graceful restart requested, doing restart
que aparentemente não fez diferença alguma.
Eu tive que reiniciar o servidor manualmente a cada vez.
Agora estou vendo mpm_prefork.conf
, que é o padrão e, a partir das informações que consegui coletar, não preciso alterar nada.
Eu comecei a suspeitar que poderia haver algum vazamento de memória e li que MaxConnectionsPerChild 1000
é uma espécie de truque para evitar vazamento de memória, então eu coloquei para este valor 1000 e verei como ele se comporta.
Já que é um erro de vez em quando, é difícil entender exatamente o que está causando o problema.
Você acha que usar MaxConnectionsPerChild
neste contexto é uma boa estratégia (esperando que o vazamento de memória seja corrigido na próxima versão do site que estou hospedando), ou isso simplesmente não indica um vazamento de memória?
NB:
Tendo um processo Apache médio consumindo ~ 20Mb de memória, reduzi o MaxRequestWorkers de 150 para 30 (considerando 500Mb de mem disponível para o Apache no servidor).
Eu tenho agora:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 30
MaxConnectionsPerChild 1000
</IfModule>
Eu não acho que a memória chegou ao máximo, mas como o meu cliente Munin estava em baixo, percebo agora, não posso excluir isso.