Eu alugo uma VM Linux da LayeredTech que é um convidado no Xen Hypervisor. O SO é o CentOS 5.3, rodando o Apache2. Quase todos os dias o meu servidor se comporta de tal forma que me leva a acreditar que estou sendo DDoS, mas não consigo encontrar nenhuma evidência como tal. Estou executando o Apache Mod_security, MySQL 5.x, PHP 5.x, tudo está atualizado em termos de versão.
A VM é relativamente de baixa potência, mas quando esse sintoma não está acontecendo, ela cuida da carga de tráfego da minha Web.
Meu servidor da web não responderá e, após o login, haverá centenas de processos HTTPD. Todos os meus hosts virtuais são chrooted e usam o SUexec, mas todos os processos gerados são executados como o usuário "apache".
O site não é malicioso na minha caixa e o servidor não mostra nenhuma evidência de estar comprometido.
Quando o problema ocorre, minhas médias de carga estão acima de 250, tudo que eu preciso fazer é reiniciar o httpd com força, e tudo está bem para qualquer lugar entre 24-72 horas.
Eu olhei em todos os arquivos de log que eu posso pensar em olhar, e não consigo encontrar qualquer evidência de um DDoS, qualquer tipo de tráfego "efeito digg", nada. Assim que eu reinicio o HTTPD, o que está causando isso para gerar muitos processos, pára. Se fosse devido a um site de alto tráfego, um link de frontpage em um site enorme, ou um DDoS, eu imagino que os pedidos nunca parariam e apenas suspendo meu servidor novamente logo após reiniciar o httpd.
Também usei várias ferramentas, como o apachetop e outras ferramentas de monitoramento em tempo real, mas geralmente não posso prever quando isso acontecerá e, quando isso acontecer, o servidor estará sobrecarregado demais para não precisar de nada além de HTTPD.
Não sei como evitar que isso aconteça, e não sei mais onde procurar a causa - Qualquer idéia seria apreciada!
Informações adicionais:
Já faz 2 anos desde que criei o servidor e configurei esses parâmetros com base em algumas coisas que li e nunca tive problemas, mas não tenho certeza se essas configurações podem ser um colaborador:
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>