(configurados através de /etc/security/limits.conf, ou apenas executando ulimit antes de executar o binário potencialmente ofensivo) são provavelmente a solução para isto.
Estou executando um aplicativo Ruby on Rails com o Passenger + Apache. Há também um servidor de lista de discussão perl (Sympa) rodando com mod_perl.
Tenho acesso root e sh ao servidor (uma máquina Ubuntu).
Na maioria das vezes, corre bem; o servidor tem memória e espaço em disco mais que suficiente para manipular a carga de trabalho.
Mas de vez em quando (talvez uma vez a cada 3 meses ou mais), alguns processos do Apache parecem "desonestos" e começam a consumir memória e cpu como um louco. Como resultado, o site cai (às vezes eu tive que fazer uma reinicialização a frio; apenas reinicializar o Apache não era suficiente). Eu fiz alguns testes e parece que os processos que estão sendo pendurados são processos Ruby, o que me faz suspeitar que o Passenger está se comportando mal.
Aqui estão alguns gráficos do Munin para a última "interrupção" (que acabou de acontecer)
Sou suspeito sobre o processo de rubi (Passenguer). No entanto, não consigo identificar as condições que acionam o "processo selvagem" (só hospedo o aplicativo, não o desenvolvi). Embora seja legal, pode ser mais simples apenas "matar o processo de enforcamento".
Gostaria de saber se existe uma maneira de "matar automaticamente" processos que consomem muita memória ou CPU. Existe algum módulo do Apache ou sinalizador de configuração que lida com este problema?
EDIT: Até agora eu tentei RLimitCPU, RLimitMEM e RLimitNPROC do Apache sem sucesso - parece que o Passenger é impermeável a essas configurações. Tenho certeza de que o problema está no Passenger agora, então estou remarcando e reescrevendo partes dessa pergunta.