Performance do Apache

O número de instâncias do servidor é uma das configurações mais diretamente relacionadas à performance do servidor e ao consumo de memória. O Apache é capaz de responder a um número indefinido de acessos simultâneos, de acordo com o link e recursos da máquina. Para cada requisição simultânea, é necessário que exista uma instância do Apache carregada na memória.

Quando o cliente acessa uma página, ele monopoliza uma dessas instâncias abertas até que a requisição seja concluída, ou seja, até que a página seja carregada ou o arquivo baixado. Em horários de alta demanda, são abertas mais instâncias do servidor Apache, que vão sendo fechadas (para economizar memória) conforme os acessos diminuem.

O número de instâncias abertas é determinada pelas quatro linhas abaixo, dentro do arquivo "/etc/apache2/apache2.conf":

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 20

A opção "StartServers" determina o número padrão de servidores que ficarão carregados na memória, respondendo a requisições. Cada instância ocupa cerca de 2 MB de memória (um pouco mais de acordo com as opções de compilação usadas), de forma que 5 instâncias consomem cerca de 10 MB de memória do servidor.

Além das instâncias principais, temos instâncias "reservas", que ficam disponíveis para absorver rapidamente picos de acesso, sem que o Apache tenha que perder tempo carregando mais instâncias para só depois começar a responder às requisições. As opções "MinSpareServers" e "MaxSpareServers" determinam o número mínimo e máximo de "reservas", sendo que o número real flutua entre os dois parâmetros, de acordo com a demanda.

A opção "MaxClients" é a parede de concreto, o número máximo de conexões simultâneas que o Apache aceita manter abertas, independentemente da demanda. Quando esse número é atingido, o acesso ao site fica cada vez mais lento, pois cada novo visitante "entra na fila" e precisa esperar que uma das instâncias do Apache fique livre, antes de conseguir carregar cada página.

Essa configuração default do Apache é adequada a um site de baixa demanda. Para um servidor dedicado, que hospede um site com muitas visitas, é necessário ajustar estes valores de acordo com a demanda. Uma forma fácil de verificar o status do servidor é ativar a diretiva "server-status" dentro do arquivo "/etc/apache2/apache2.conf". Adicione (ou descomente) as linhas abaixo:

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 200.234.23.233
# (onde o 200.234.23.233 é o IP do micro do onde o relatório será acessado)
</Location>

Ative a configuração usando o comando "/etc/init.d/apache2 force-reload". A partir daí, você pode ver um instantâneo do status do servidor acessando a pasta "server-status", como em "http://kurumin.com.br/server-status", a partir do navegador.

A oitava linha indica o número de instâncias abertas, como em:

8 requests currently being processed, 5 idle workers

Nesse exemplo temos 8 conexões abertas e 5 instâncias reservas do Apache abertas, prontas para receber novas conexões. A velocidade do acesso ao site está normal.

Mas, o que acontece no caso de um pico de acesso, com 50 acessos simultâneos? Na configuração padrão você teria:

20 requests currently being processed, 0 idle workers

Ou seja, o Apache responde às primeiras 20 conexões e coloca as demais na fila, fazendo com que os visitantes tenham que esperar vários segundos. Em casos mais extremos, o tempo de espera poderia ser tamanho que o site ficaria virtualmente fora do ar. É o que muitas vezes acontece com links publicados em sites muito acessados, como o slashdot.org.

Isso pode ser minimizado configurando o Apache corretamente. Se você tem um servidor dedicado, com 256 MB de RAM, por exemplo, onde cada instância do Apache consome 2 MB, você poderia deixar a opção "MaxClients" com o valor "80" ou "100", de forma que o Apache aceite conexões até esgotar o limite da memória disponível (lembre-se de que além do Apache, temos o MySQL, PHP e outros recursos, que também consomem memória). Acima disso não adianta, pois o servidor passaria a usar memória swap, o que comprometeria o desempenho.

A partir daí, você pode ajustar as opções "StartServers" e "MinSpareServers" de acordo com o número médio de acessos simultâneos. Em um site com, em média, 10 acessos simultâneos e picos de 20 ou 30 acessos, uma boa configuração seria:

StartServers 10
MinSpareServers 10
MaxSpareServers 20
MaxClients 80

Outra opção que afeta negativamente o desempenho é a "HostNameLookups", onde o Apache verifica a origem de cada acesso, fazendo uma busca de domínio. Ativar essa opção permite criar estatísticas de acesso mais detalhadas, incluindo os países e provedores de acesso usados pelos visitantes, mas tem um impacto negativo muito grande na performance de um servidor congestionado. No Apache 2 ela já vem desativada por padrão, mas em versões antigas era necessário desativá-la manualmente:

HostNameLookups Off


Você pode simular tráfego no seu servidor, verificando como ele se comporta com níveis variados de tráfego usando o comando "ab", que faz parte do pacote "apache-utils". Chame-o indicando o número de requisições simultâneas e a página que será carregada, como em:
$ ab -n 1000 -c 20 http://www.meusite.com/teste.php

Nesse exemplo, estamos fazendo 1000 acessos à página, mantendo 20 requisições simultâneas. Se possível, lance o teste a partir de outro servidor com link rápido, ou peça para vários amigos rodarem o comando simultaneamente, cada um usando sua conexão. Isso transformará o teste em algo mais parecido com uma situação normal.


Para ver o artigo na integra, clique aqui

Fonte: GDHPress (www.gdhpress.com.br)

Comentários

Postagens mais visitadas deste blog

Como funcionam as coisas

A marca de liderança faz a diferença