Atualmente no meu Apache 2 (Apache 2.4.7 para ser exato) no Ubuntu 14.04, tenho esta configuração:
/etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 100
MaxSpareServers 250
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
O servidor é um servidor Amazon de 8 GB (RAM) que não faz nada além de carregar um formulário de inscrição de três páginas para algumas campanhas publicitárias do Google.
Encontrei um script chamado apachetuneit.sh na Web, mas depois de algum tempo o Apache estava relatando este erro:
[Terça-feira, 21 de abril 16: 45: 42.227935 2015] [mpm_prefork: error] [pid 1134] AH00161: servidor atingiu a configuração MaxRequestWorkers, considere aumentar a configuração MaxRequestWorkers
Como julgar como definir essas configurações?
Estou perguntando especificamente apenas como ajustar o Apache 2.4 e nada mais. É por isso que esta pergunta é diferente dessa pergunta .
fonte
Respostas:
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:
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.
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:
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.
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.
... 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:
fonte
sudo
precisam mostrar como código, não como texto normal. Eu segui a documentação sobre formatação, mas ainda luto aqui.Para o qual você pode aumentar o MaxRequestWorkers, depende da quantidade de RAM que cada um dos processos httpd / apache ocupa. Se cada um ocupar 50 MB (apenas escolhendo um número aleatório), a cada 20 trabalhadores solicitados que você usa em simultâneo (ou seja, conexões simultâneas) ocuparão 1 GB. Portanto, nesse exemplo, você pode ter no máximo 8 GB * 20 = 160 MaxRequestWorkers. No entanto, você não pode usar toda a memória RAM para o apache, é necessário reservar um pouco para outras coisas em execução lá. Além disso, deixar alguma RAM sobressalente pode ser útil para o desempenho, pois o sistema operacional o usará para armazenar em cache coisas e acelerar o desempenho (embora seja preferível não ficar sem conexões em comparação com o servidor ser extremamente rápido, pois o site parecerá lento enquanto os navegadores dos usuários esperam que uma conexão seja disponibilizada se todos se esgotarem).
fonte
free
comando para obter uma linha de base da memória. Aumente o número de processos em execução aumentando MinSpareServers, reiniciando o apache, executandofree
novamente e fazendo as contas. Confira moreofless.co.uk/apache-memory-usage para mais detalhes e explicações.