Apache falha VPS - precisa reduzir o uso de memória

3

Eu tenho um VPS executando um aplicativo da Web veiculado usando o Apache, que, em média, lida com 20 a 50 solicitações por segundo. Geralmente é acima deste ponto (50 solicitações por segundo) que a quantidade de memória que o Apache usa é muito alta para o VPS e erros começam a ocorrer - as páginas da web travam e o VPS cai por um minuto ou dois antes de retornar aos níveis normais. / p>

Acredito que MaxClients é a melhor maneira de reduzir a quantidade de RAM que o Apache usa e estou planejando reduzir MaxClients de 256 (valor padrão) para cerca de 100. Cada processo Apache usa ~ 15MB e o servidor tem 1900MB de RAM no total - o servidor não faz mais nada além de executar o Apache e alguns crons.

As configurações atuais são:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3

# 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>

Eu tentei reduzir os MaxClients antes que levam a lentidão em massa, então também preciso de algumas outras opções.

Minha sugestão de reduzir MaxClients para ~ 100 parece sensata? Quais são minhas opções se o servidor experimenta lentidão novamente - otimizar o aplicativo? Qual é a melhor maneira de reduzir o uso de memória - mover imagens para outro servidor web?

Qualquer sugestão recebida com gratidão!

    
por Rhodri 11.02.2010 / 16:29

1 resposta

2

O melhor método para reduzir o uso de memória do apache é se afastar de mod_php e algo como fastcgi. Cada um dos seus processos apache é 15mb ou mais por causa da sobrecarga de mod_php (mais provável). Ter solicitações php entregues ao fastcgi reduzirá o tamanho médio do processo do apache para cerca de 1mb, dependendo da configuração do apache.

Como o php agora é centralizado usando o fastcgi, o uso da memória é mais eficiente e a quantidade total de memória usada pelo sistema deve diminuir um pouco.

Outra abordagem seria colocar um servidor http com mais eficiência de memória na frente do apache e ter o conteúdo estático do servidor diretamente e solicitações não estáticas de proxy para o apache. O Nginx seria ótimo para isso.

Como uma correção temporária, você também pode procurar diminuir o MaxRequestsPerChild para 1000 ou algo mais agressivo. Como os processos do apache tendem a crescer em tamanho à medida que eles atendem a solicitações, isso limitará seu tamanho, eliminando-os e gerando novos.

    
por 11.02.2010 / 22:42