Apache com mod_perl comendo memória quando ocioso

2

Um servidor web Apache rodando um aplicativo mod_perl está expondo o uso anormal de memória - depois que a "carga do dia" cessa, a memória do sistema está sendo esgotada pelos processos do Apache e o o_killer está sendo chamado. À medida que a carga retorna na manhã seguinte, o uso de memória se normaliza - provavelmente porque os funcionários do Apache são reciclados periodicamente se um número suficiente de ocorrências for gerado:

Esteéográficodeocorrênciasdoapacheporsegundoparacorrelacionar:

Os 2 hits por segundo restantes durante a noite são induzidos pelas verificações do HAProxy - ele executa HEAD http://mydomain.example.com/running HTTP/1.0 pedidos no servidor a cada meio segundo com "execução" sendo um arquivo estático (ou seja, não invocando qualquer código perl). Também parece que desabilitar essas verificações resolve o problema de uso de memória, mas obviamente não pode ser uma solução.

Todos os 3 servidores configurados de forma semelhante (por trás do HAProxy) expõem esse comportamento. O sistema operacional em execução é o Ubuntu 10.10, o Apache versão 2.2.16. Isso parece ser um vazamento de memória, mas não tenho idéia de como começar a depurá-lo - alguma dica?

    
por the-wabbit 21.06.2012 / 09:17

1 resposta

2

Isso ocorre porque o vazamento de memória no código perl. A reciclagem da manhã pode ser feita por ocasião do logrotate. Qual é a melhor solução para isso é usar fast-cgi em vez de mod_perl, que está usando, e. 30 trabalhadores, então cada um está comendo memória, então, se cada um deles reciclar muitas vezes, como 100 pedidos, e não 1000 ou 10000, isso consumirá memória de qualquer maneira. Então, se você configurar, por exemplo 8, 16, 32 trabalhadores fast-cgi (depende da sua RAM), e reciclá-los a cada 100 páginas renderizadas, isso não consumirá tanta RAM, e o desempenho não será degradado. Além disso, você terá mais segurança se puder dividir os módulos entre os diferentes usuários do fast-cgi executados em diferentes usuários e, idealmente, você também configurará o SELinux para isolar essas contas.

    
por 21.06.2012 / 10:23