Apache prefork optimization - Escolhendo o valor 'MaxRequestsPerChild' correto

9

Estou tentando otimizar nossos servidores da Web para lidar com o máximo de conexões possível. Eu li muitos posts e as anotações do Apache. Estou tentando entender qual valor devo escolher para MaxRequestsPerChild .

Primeiro, tentei defini-lo como 4.000, mas o servidor teve dificuldades em lidar com muitas solicitações, então comecei a criá-lo. No momento, minha configuração é:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  40000
</IfModule>

Depois de definir o MaxRequestsPerChild para 40.000, o servidor conseguiu lidar com mais conexões sem usar mais memória / cpu.

Alguém pode me dizer por favor se esse valor é muito alto ou não tem problema em ter um valor tão alto?

Obrigado!

Informações do SO:

[root@web06 ~]# uname -a
Linux web 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
[root@web06 ~]# free
             total       used       free     shared    buffers     cached
Mem:       3814660    3502968     311692          0     144368    2970468
-/+ buffers/cache:     388132    3426528
Swap:      5210104          0    5210104
    
por Kuf 09.08.2012 / 14:07

1 resposta

9

MaxRequestsPerChild é realmente útil apenas para limitar a quantidade de vazamento de memória ao longo do tempo ao executar scripts dinâmicos. Se você está apenas servindo conteúdo estático ou scripts muito pequenos / simples, então provavelmente você pode configurá-lo para 0 ou muito alto sem muito efeito. Se você estiver executando scripts maiores / complexos, configurá-lo como 0 / alto resultará em seus processos do Apache consumindo mais e mais memória. Exatamente o quanto mais depende da sua aplicação específica.

Por outro lado, ajustá-lo muito baixo pode resultar em um pouco mais de uso da CPU, pois os processos do Apache estão sendo reiniciados constantemente.

Eu faria um teste simples para ver quanta memória seus processos podem usar. Defina MaxRequestsPerChild para 0 e reinicie o Apache. Teste o carregamento de algumas páginas e veja o tamanho inicial dos processos do Apache usando top . Verifique novamente depois de algumas horas / dias / semanas (dependendo do aplicativo e das exibições de página) e veja como ele cresce. Se não crescer muito, então um valor 0 ou muito grande para MaxRequestsPerChild deve ficar bem.

Se você tem um tamanho máximo definido para seus processos do Apache (ou seja, você quer que eles tenham 50MB ou menos), então você pode fazer o mesmo teste com vários valores de MaxRequestsPerChild até encontrar um valor que mantenha o Apache menor que isso.

    
por 09.08.2012 / 14:28