Tuning Apache 2.x
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!


