Tuning Apache 2.x

Posted on julho 19, 2011. Filed under: Linux, Tuning |

O objetivo deste artigo é ajudar você a melhorar o desempenho do seu servidor web Apache. Da versão 1.3 para versão 2.x aconteceram diversas melhorias relacionadas ao desempenho. Porém ainda é possível melhorar ainda mais a perfomance manipulando alguns parâmetros de configuração. O Objetivo aqui é abordar os principais parâmetros de configuração que possam influenciar diretamente na perfoamance.

Hardware

O principal fator no hardware que afeta a perfomance do Apache é memória. Monitore seu servidor para que ele nunca precise utilizar memória da swap. Você pode controlar a quantidade de memória utilizada pelo servidor através do parâmetro MaxClientes como veremos mais adiante. Além disso, procure sempre ter placas de redes, discos e cpus mais rápidos possíveis.

AllowOverride

Caso você esteja utilizando a solução AllowOverride junto com .htaccess, o Apache irá tentar abrir o arquivo .htaccess em cada requisição efetuada para o servidor prejudicando a perfomance. Por exemplo, caso você utilize:

DocumentRoot /var/www
<Directory />
  AllowOverride All
</Directory>

Ao chegar uma requisição para /index.html, o Apache irá tentar abrir os arquivos /.htaccess, /var/.htaccess e /var/www/.htaccess em todas requisições recebidas. Para evitar essa sobrecarga no servidor, se possível, desabilite a opção AllowOverride:

DocumentRoot /var/www
<Directory />
  AllowOverride None
</Directory>

Procure transportar toda configuração que você tiver dentro dos arquivos .htaccess para a configuração principal do apache ou virtual host. Por exemplo, caso você tenha a configuração no arquivo /var/www/protegido/.htaccess:

Deny from all

Transportando para o virtual host na configuração do apache:

<Directory "/var/www/protegido/">
  Deny from all
</Directory>

ExtendedStatus

Caso esteja usando mod_status para monitorar os processos do apache garanta que a opção ExtendedStatus esteja Off caso contrário o apache irá realizar diversas chamadas adicionais no sistema para cada requisição recebida.

<Location /server-status>
  SetHandler server-status
  ExtendedStatus Off
  Order deny,allow
  Deny from all
  Allow from localhost ip6-localhost
</Location>

SymLinks

A opção FollowSymLinks diz ao apache para seguir todos os links simbólicos do diretório. Caso essa opção esteja Off o Apache irá executar processos extras para verificar se o diretório ou arquivo não é um link simbólico. Portanto deixe essa opção sempre habilitada quando possível:

DocumentRoot /www/htdocs
<Directory />
  Options FollowSymLinks
</Directory>

Caso necessite de uma segurança maior e queira usar a opção SymLinksIfOwnerMatch ao invés da FollowSymLinks lembre-se que téra um custo maior nesse caso, pois a opção SymLinksIfOwnerMatch fará com que o apache verifique se o usuário dono do link corresponde ao mesmo usuário dono do destino do link. Então use-a com critério. Outra opção é a configuração abaixo, que faz com que a utilização SymLinksIfOwnerMatch seja menos custosa:

DocumentRoot /www/htdocs
<Directory />
  Options FollowSymLinks
</Directory>

<Directory /www/htdocs>
  Options -FollowSymLinks +SymLinksIfOwnerMatch
</Directory>

Essa última configuração evita checagens extras no DocumentRoot.

KeepAlive

A opção KeepAlive permite que o apache trabalhe com conexões persistentes, ou seja, é possível que milhares de requisições sejam tratadas em uma mesma conexão TCP. Habilitar essa opção reduz significativamente a carga do sistema.

Segue abaixo a configuração para ser inserida no arquivo de configuração do Apache, habilitando o KeepAlive:

KeepAlive On
MaxKeepAliveRequests 1000
KeepAliveTimeout 3

A diretiva MaxKeepAliveRequests determina o número máximo de requisições permitidas para uma conexão persistente. Defina um valor alto para uma melhor perfomance.

A diretiva KeepAliveTimeout determina o número de segundos que o Apache irá aguardar por uma subsequente requisição antes de fechar a conexão persistente. Defina para um valor pequeno. Valores altos poderão prejudicar a perfomance. Quanto maior o valor, maior o número de processos ficarão ocupados esperando por requisições enquanto não chega no timeout especificado.

MaxClients

A opção MaxClients determina o número limite de conexões simultâneas tratadas pelo Apache. Caso a conexão não possa ser tratada, pois chegou no limite máximo de conexões simultâneas, a conexão será colocada em uma fila. Essa diretiva influencia diretamente na performance do servidor. Caso seja definida um número pequeno, poderá estar consumindo pouco recurso do servidor, deixando-o ocisoso. Setar para um valor muito alto, poderá consumir 100% dos recursos, principalmente memória. Uma regra para calcular um número ideal para essa diretiva, é determinar a média do tamanho de um processo do apache, através de um comando como o top, e dividir pela quantidade de memória disponível, deixando, é claro, na suas contas, uma quantidade de memória para outros processos.

Segue a equação:

MaxClients ≈ (RAM - qtde memória para outros processos)/(média do processo apache)

Para obter quantidade de memória disponível no sistema: (Verificar -/+ buffers/cache: para obter quantidade de memória livre).

# free -m

Para ajudar a calcular o tamanho médio do processo do apache, pode utilizar top, ou o comando ps. Segue o comando ps abaixo para ajudar:

# ps -ylC apache2 --sort:rss

Espeque que alguma dessas dicas possa tê-lo ajudado a tornar seu apache mais rápido. Abraço!

Make a Comment

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: