Reconheça que o Ubuntu 14.04 usa o Apache 2 com o PHP executando um módulo mpm_prefork , do qual um arquivo editável está em /etc/apache2/mods-enabled/mpm_prefork.conf. Além disso, reconheça que a partir do Apache 2.4, o MaxClients agora é renomeado como MaxRequestWorkers e, portanto, qualquer documentação referente ao MaxClients precisa ser trocada para MaxRequestWorkers.
Pare o serviço da web Apache com o seguinte comando, temporariamente:
serviço sudo apache2 stop
- Aguarde 5 segundos e execute o seguinte comando para descobrir quanta memória virtual você possui no servidor que está livre:
sudo free -ht
Leia a linha Mem: e veja a coluna gratuita. Considere isso como a quantidade de RAM que você pode dedicar ao Apache, embora eu normalmente goste de deduzir 2 GB em um servidor mais robusto (como em> 4 GB) ou 1 GB em um servidor mais leve. Portanto, se a coluna livre disser que eu tenho 13 GB de graça, eu recomendaria dar 11 GB ao Apache. Essa é uma linha de base. Se encontrarmos algum problema no banco de dados nos logs ocasionalmente (como três vezes nos logs em um período de 3 dias) em que ele precisa de mais memória, podemos considerar que tínhamos apenas 10 GB para brincar em vez de 11 GB (neste caso ) Se encontrarmos nos logs do Apache que o servidor precisa de mais MaxRequestWorkers, esse é outro problema que abordarei abaixo.
- Inicie o servidor da web Apache.
serviço sudo apache2 start
Abra como 10 guias do navegador, conecte-se a algumas das páginas mais longas ou de carregamento mais lento no site e atualize 3-4 vezes em cada guia.
Depois de fazer isso, execute rapidamente o seguinte comando:
sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {print "Uso de memória Apache (MB):" x / 1024; print "Tamanho médio do processo (MB):" x / ((y-1) * 1024)} '
Execute-o como 5 vezes rapidamente.
Observe o valor Tamanho médio do processo e calcule a média desse valor entre as 5 vezes em que você o executou.
Agora faça o seguinte cálculo e converta GB em MB conforme necessário, para que todos os números estejam em valores de MB. Portanto, multiplique 1024 ou divida por 1024, dependendo do caminho que você precisa seguir.
MaxRequestWorkers = Livre da linha de base (com espaço no buffer) / Tamanho médio do processo
Por exemplo, eu tinha um servidor de 14 GB, mas quando o Apache foi parado, o servidor mostrou que ele usava 1 GB de RAM em modo inativo. Em seguida, forneço outro 1 GB em algum espaço extra de buffer para o sistema operacional, caso seja necessário. Isso significa que eu teria uma linha de base gratuita de 12 GB. Agora devo convertê-lo de GB para MB e, portanto, multiplico 12 x 1024 e obtenho 12288. Os 12288 MB são o meu valor Baseline Free. No meu caso, vi que o tamanho médio do processo era de 21 MB. Então, eu pego 12288/21 e recebo aproximadamente 585. Agora, é comum que os sysops arredondem esse valor e, portanto, eu tenho 580.
- Edite o arquivo /etc/apache2/mods-enabled/mpm_prefork.conf e considere configurá-lo com os seguintes padrões, substituindo XXX pelo cálculo do MaxRequestWorkers:
`<IfModule mpm_prefork_module>`
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers XXX
ServerLimit XXX
MaxConnectionsPerChild 0
</IfModule>
Observe que você pode não ver o parâmetro ServerLimit lá. Adicione. O parâmetro padrão é 256, se não estiver presente, mas precisa ser o mesmo valor que MaxRequestWorkers, ou você receberá um erro.
Outro fator crítico na sua configuração do Apache é o arquivo /etc/apache2/apache2.conf com a variável Timeout e é medido em segundos. É quanto tempo você pode enviar ou receber do servidor antes de atingir o tempo limite. Você também deve ter em mente um upload ou download de arquivo, como se você tiver um site em que as pessoas possam fazer upload ou download de CSV ou outros arquivos grandes, por exemplo. E você precisa ter em mente um servidor de banco de dados ocupado e onde pode ser necessário fornecer um tempo antes do tempo limite das páginas. Quanto menor a variável Timeout, mais disponível o servidor da Web recebe novas conexões. Observe, no entanto, que definir esse valor muito baixo pode causar estragos nas variáveis de sessão do PHP, embora não nos cookies baseados em sessão do navegador. Então, por exemplo, um valor de 300 (5 minutos) pode ser bom para um servidor Web que depende de variáveis de sessão PHP para o fluxo de trabalho de aplicativos da Web em vez de cookies de sessão do navegador. Um valor de 45 pode ser bom para um servidor Web que não serve nada além de páginas de destino de publicidade estática, mas seria terrível para um servidor que precisa usar muito variáveis de sessão PHP. Portanto, edite o parâmetro Timeout neste arquivo na quantidade necessária. Isso pode levar alguns testes com todas as suas páginas da web para ver se o valor é muito baixo. Provavelmente, é uma boa idéia, no entanto, não definir um valor superior a 300, a menos que você esteja tendo problemas em uploads de arquivos grandes ou downloads de arquivos grandes. mas seria terrível para um servidor que precisa usar muito as variáveis de sessão PHP. Portanto, edite o parâmetro Timeout neste arquivo na quantidade necessária. Isso pode levar alguns testes com todas as suas páginas da web para ver se o valor é muito baixo. Provavelmente, é uma boa idéia, no entanto, não definir um valor superior a 300, a menos que você esteja tendo problemas em uploads de arquivos grandes ou downloads de arquivos grandes. mas seria terrível para um servidor que precisa usar muito as variáveis de sessão PHP. Portanto, edite o parâmetro Timeout neste arquivo na quantidade necessária. Isso pode levar alguns testes com todas as suas páginas da web para ver se o valor é muito baixo. Provavelmente, é uma boa idéia, no entanto, não definir um valor superior a 300, a menos que você esteja tendo problemas em uploads de arquivos grandes ou downloads de arquivos grandes.
Agora reinicie seu serviço da web Apache. Se você fez algo errado, o Apache provavelmente o informará no momento em que você o iniciar novamente, e você poderá corrigi-lo.
serviço sudo apache2 reiniciar
- Agora repita o truque do navegador de 10 guias que você fez anteriormente e verifique se você encontrou erros de configuração do Apache no log de erros do servidor da web Apache:
sudo tail -f /var/log/apache2/error.log
... pressione CTRL + C para sair disso, se desejar.
Procure uma reclamação sobre a necessidade de MaxRequestWorkers (e recentemente, desde que você reiniciou o servidor da web). Se você perceber que, mesmo com uma configuração ideal do MaxRequestWorkers, provavelmente precisará de mais poder de fogo para seus sites ou aplicativos. Considere estas opções:
- Usando uma CDN para downloads de arquivos grandes, imagens e scripts.
- Usando um serviço de armazenamento em cache como o CloudFlare ou outros.
- Refazendo seu site ou estratégia de aplicativo da web para usar vários servidores da web, agindo como um "aplicativo da web" atrás de um balanceador de carga.
- Adicionando mais RAM ao servidor e, assim, fazendo esse cálculo novamente.
- Agora que o servidor Apache está ajustado, é uma espécie de linha de base ajustada. Você precisará verificar isso ao longo de duas a três semanas e procurar problemas no MaxRequestWorker nos logs de erro do Apache. A partir disso, você pode tomar uma decisão sobre otimização (consulte a etapa 10). Você também pode instalar o Munin com o apt no Ubuntu e observar o desempenho do Apache ao longo do tempo e planejar uma ideia de crescimento antes de decidir que precisa fazer algo sobre a quantidade de tráfego que o servidor da web está lidando.