Servidor Apache mal usado elevar MaxRequestWorkers alcançado: vazamento de memória?

4

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.

    
por coolnodje 16.02.2015 / 03:19

3 respostas

2

Remover Owncloud 8.0.0 do meu diretório raiz de documentos é a resposta final. Depois disso, o Apache apenas funciona como esperado ...

Teria sido bom entender o que estava causando o problema e como configurar o Apache para que ele pudesse lidar com aplicações PHP problemáticas. É decepcionante que MaxConnectionsPerChild não seja capaz de lidar com o problema nesse caso, mas, novamente, não tenho certeza do que realmente aconteceu, embora o log de erro MaxRequestWorkers parecesse indicar que o número de encadeamentos era o problema.

    
por 21.02.2015 / 03:23
1

Talvez minha situação seja única demais, eu estava recebendo o mesmo erro server reached MaxRequestWorkers setting e acreditava que o meu também era um site de baixo tráfego. Caso contrário, as toras eram estéreis. Eu encontrei uma postagem que dizia que eu podia aumentar o nível de registro do Apache de "avisar" para "depurar", então alterei o código na tentativa de coletar algo útil. Eu estava seguindo o /var/log/apache2/error.log quando reiniciei o Apache, e a saída imediatamente explodiu em uma bagunça de rolagem sem fim. Eu não conseguia ler como estava passando tão rápido. Eu notei que a cada 1000 linhas havia uma linha normal, mas o resto das linhas eram idênticas - todas originárias de um IP russo. Meu primeiro DOS!

Eu li que você poderia descartar pacotes de um ip específico usando uma linha no iptables. Eu corri duas linhas e a rolagem parou - COLD.

iptables -A INPUT -s <ip address here> -j DROP
iptables -A INPUT -s <ip address here> -j DROP

Existem muitos recursos bons sobre como mitigar ataques do DOS, mas, para mim, eu ainda não sabia que estava abaixo de um. Seguindo este [mpm_prefork:error] pista foi a minha grande chance. Tenho certeza de que nem todo erro do prefork é um ataque do DOS, mas talvez este post possa ajudar alguém!

link

link

iptables regras para combater os ataques mais comuns de DoS? / a>

    
por 31.08.2016 / 06:35
0

Você talvez tenha um monte de processos aguardando sub-requisições para o apache, enquanto esses processos garantem que o apache nunca tenha um processo sobressalente para responder?

É importante que qualquer chamada para um URL no mesmo servidor tenha um tempo limite.

    
por 04.03.2016 / 01:29