O principal parâmetro para ajustar o uso da memória do Apache será MaxClients
. Um valor muito baixo e você ficará sem slots disponíveis para atender às solicitações do cliente. Demasiada e você gastará toda a sua RAM e começará a usar o espaço de troca que prejudicará o desempenho (pode parecer uma falha do servidor).
Uma maneira de ajustar MaxClients
é observar o uso da memória do sistema e ajustar a configuração conforme necessário. Se o servidor começar a trocar, edite-o para baixo. Se o servidor tiver memória livre, coloque-o.
Você também pode estimar o valor máximo observando o uso de memória do Apache. Iniciar top
e pressione M
para classificar os processos de memória. Você deve ver algo como:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Subtraia as colunas RES e SHR para obter o uso aproximado de memória por instância do Apache. Nesse caso, é cerca de 16 MB. Se eu tiver 4 GB de RAM e desejar que 3 GB sejam usados para o Apache, minha configuração de MaxClients será em torno de:
MaxClients = 3000/16 = 188
Portanto, nesse caso, eu poderia começar com um valor de 150-200, mas observaria o uso da memória e, se alguma vez começar a usar o swap, diminuiria o MaxClients de 10 a 20%. Observe também que o valor de 3 GB é apenas um exemplo aleatório. Em servidores executando apenas o Apache, posso usar quase todos os 4 GB. Em outros casos, talvez eu queira apenas 1 ou 2 GB para o Apache, salve o restante para outros aplicativos, o sistema ou o cache.
Editar: Responder a perguntas adicionais
Geralmente, não há valores mágicos do MaxClients ou dos outros parâmetros de configuração do Apache que tornarão seu servidor repentinamente duas vezes mais rápido. Alguns servidores parecerão funcionar perfeitamente, seja MaxClients 10 ou 1000. Há dois casos principais em que a configuração MaxClients é "incorreta":
- Muito baixo : quando o MaxClients estiver muito baixo, você chegará a uma situação em que todos os clientes Apache estão sendo usados e novas conexões entrarão em uma fila aguardando o próximo cliente ficar disponível. Se você ativar o mod_status do Apache, poderá obter uma visualização em tempo real de quantos clientes estão ocupados em um determinado momento. Esse estado é relativamente fácil de diagnosticar, pois o site fica lento durante períodos de tráfego intenso e todos os clientes podem estar em uso.
- Muito alto : quando o MaxClients estiver muito alto, você começará a esgotar toda a RAM e começará a usar a troca. Quando isso ocorre, o desempenho do site cai para praticamente zero (considere a diferença de velocidade entre a RAM e o disco). Esse estado pode ser muito mais difícil de observar e diagnosticar, pois um servidor funcionará perfeitamente com um MaxClients alto até que haja um aumento no tráfego. Por exemplo, em um site que recebe alguns acessos por hora, posso definir o MaxClients como 1000, muito mais do que suportável pela RAM, mas nunca vi um problema devido ao Apache precisar apenas usar um ou dois clientes por vez. Só detectarei o problema quando houver um aumento no tráfego, aumentando o número de clientes usados simultaneamente, até que a RAM se esgote e o espaço de troca seja necessário.
Embora eu não conheça os detalhes do seu servidor, aplicativo ou tráfego, posso sugerir os seguintes valores de configuração como ponto de partida. Experimente, monitore a carga e o uso do servidor e altere as configurações conforme necessário.
- mod_status : habilite isso para poder ver o uso do Apache. Para estatísticas mais avançadas, instale um aplicativo de monitoramento como o Zabbix / Nagios para poder rastrear o uso do servidor e os padrões de tráfego.
- MaxClients : defina para um valor de 100-200. Gostaria de começar com um valor mais baixo se não tiver certeza e monitorar o uso de memória / CPU / Apache. Este será o principal parâmetro para ajustar.
- MaxRequestsPerChild : especifica quando um cliente / filho Apache será reiniciado. Não há valor errado (embora valores muito pequenos possam ser ineficientes) e isso dependerá do conteúdo da sua veiculação. Para conteúdo dinâmico, um grande valor diferente de zero (por exemplo, 1000) impedirá que seus processos httpd se tornem muito grandes.
- Outros parâmetros : Embora eu não tenha feito um benchmarking completo dos parâmetros restantes, eles devem ter um efeito relativamente menor, a menos que você os defina com valores muito baixos ou muito altos. O uso dos padrões deve ser bom para a maioria dos sites. Consulte a documentação do módulo Apache Prefork ou Worker para obter uma descrição completa dos parâmetros e que é usada em cada módulo (não há sentido em tentar ajustar um parâmetro que você não usa).
- Benchmarking : Como você ajusta os parâmetros, eu recomendaria o uso de uma ferramenta de benchmarking como ab (ApacheBench) ou cerco para obter um número quantitativo das capacidades do seu servidor. Confiar apenas na sensação ou algo pior, ver se ela falha ou não, não é um bom método para ajustar os parâmetros de um servidor da web.