Limitar o uso de memória do Apache 2

9

Estou executando um servidor de hobby em um antigo G3 / 300 Blue & White G3 / 300 executando o Debian PPC Squeeze 2.6.30. O desempenho é bom por um tempo após uma reinicialização, mas acaba ficando cada vez mais atolado. No momento, ele tem 76 dias de atividade, e o principal culpado parece ser o uso de memória de mais de 10 processos apache2.

Acho que preciso para diminuir os valores para StartServers, MinSpareServerse / ou MaxSpareServers, mas não tenho certeza qual deles para ajustar, e há três seções para cada dependendo de qual módulo MPM está em uso.

Como posso saber qual das seções a seguir preciso alterar e quais são alguns valores razoáveis, uma vez que a caixa possui 448 MB de memória física (histórico de atualização estranho de um a cada 64, 128 e 256 sticks)?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

Não existem outras instâncias do StartServers no meu apache2.conf, mas nenhum desses módulos mpm aparece em mods-availableou mods-enabled. Ideias?

Obrigado!

UltraNurd
fonte
Eu assumi que sua caixa está com pouca memória (e seu desempenho ruim vem da troca pesada). Se você não está trocando eu vou chateá-lo para obter mais detalhes :-)
voretaq7

Respostas:

6

Atualmente, 400 MB não são muito para um servidor Web - você pode considerar substituir a caixa :)

Dito isso, se o uso da memória está aumentando, você provavelmente tem um vazamento de memória em algum lugar - para um teste rápido, verifique o tamanho dos processos httpd agora, pare / inicie o Apache e veja se eles são muito menores. Se eles estiverem assistindo por alguns dias e ver se eles crescem.

Se for um vazamento de memória, a solução real é encontrar e corrigir o vazamento de memória, mas como isso geralmente é um problema, você também pode se ajustar MaxRequestsPerChilda algo diferente de 0 (ilimitado). Isso matará os funcionários do Apache quando eles atenderem a um número fixo de solicitações (forçando-os a abrir mão da memória vazada no processo.

Comece com valores maiores (mais ou menos aos milhares) e desça às centenas. Se você receber menos de 100 solicitações por filho, seu vazamento de memória é grande o suficiente para justificá- lo, pois o desempenho atingido ao matar constantemente e gerar novamente trabalhadores apache será significativo.


Re: qual mpm para ajustar, a resposta é quase certamente prefork.
Você pode correr httpd -Ve procurar a Server MPM:linha que lhe dirá com certeza.

voretaq7
fonte
1
-V me deu as informações pré-fork que eu precisava (embora seja apache2 -V no meu caso). Obrigado!
UltraNurd 12/02/10
Parece ter feito o truque. Acho que o problema era que eu estava ficando sem memória física e trocando porque havia muitos servidores filhos em funcionamento (cada um com aproximadamente 80 MB). E sim, eu sei, o servidor é antigo. Mas mal atende a quaisquer solicitações: oD.
UltraNurd 12/02/10
1
Se você não está lidando com um monte de pedidos você também pode cortar as contagens Start & servidor reserva como você mencionou em seu post original (em sistemas de desenvolvimento que eu defini-los todos a algo entre 2 e 5 para reduzir o uso de RAM)
voretaq7
Acabei reduzindo as peças mínimas e máximas para 3 e 6 de 5 e 10, e isso parece deixar RAM suficiente para impedir que as coisas sejam trocadas. Obrigado!
UltraNurd 17/02/10
1

Para definir o uso de memória do processo apache, você deseja ajustar os MaxClients.

A regra geral é: (Máxima memória desejada) / (Uso de memória de 1 processo Apache) = # Máximo de clientes

No final, você também precisa ajustar seu MaxSpareServers <= Max Clients .

O uso da memória de um processo depende fortemente dos módulos que você carregou (php e assim por diante), portanto, você pode definir um número menor de clientes Max.


fonte