Antes de tentar ajustar o Apache, certifique-se de ter um monitoramento adequado para poder ver quantas solicitações o Apache atende e como os recursos do sistema se correlacionam entre si. Uma solução fácil de usar para isso é munin .
Em seguida, prepare os testes de carga com os quais você pode colocar seu sistema sob carga para ver o efeito das diferentes opções de ajuste. Existem algumas soluções para isso, desde um ab muito simples sobre JMeter para soluções baseadas em nuvem muito sofisticadas com as quais você pode simular milhares de visitantes de todo o mundo. Pesquise por "teste de carga do website" e você encontrará muitas soluções.
Finalmente, aqui estão os pontos que considero importantes ao ajustar o Apache:
-
Remover módulos não utilizados: use
apache2ctl -M
para ver quais módulos estão carregados. Os módulos marcados com(shared)
devem ser removidos se não forem necessários. Isso reduzirá o consumo de memória do Apache e permitirá que seu sistema operacional use a RAM disponível para outras finalidades (por exemplo, armazenamento em cache). -
Não use arquivos
.htaccess
: coloque todas as configurações na configuração do Apache e definaAllowOverride None
, para que o Apache não precise procurar.htaccess
arquivos e analisá-los enquanto atende a solicitações. -
Permitir explicitamente links simbólicos: Ao definir
Options +FollowSymLinks -SymLinksIfOwnerMatch
, você diz ao Apache que os links simbólicos são permitidos, por isso é livre para exibir os arquivos que lê sem precisar verificar se eles são links simbólicos. Isso economiza algumas chamadas do sistema. -
Dependendo das suas necessidades de monitoramento, considere desligar
ExtendedStatus
: isso salvará algumas chamadas do sistema, mas fornecerá menos informações de monitoramento. Não tenho certeza se realmente vale a pena. -
Evite o registro em log excessivo: o registro de todas as solicitações pode causar um pouco de E / S. Usando o registro seletivo, você pode controlar quais solicitações deseja registrar. Os itens a seguir registram apenas solicitações para URLs que terminam em .html:
SetEnvIf Request_URI ".html$" dolog CustomLog /var/log/apache2/access.log combined env=dolog
-
Se você não precisa de SSL, considere o uso do Event MPM, isso faz com que as conexões abertas (por exemplo, devido a keepalives) sejam tratadas com muito mais eficiência. Se você precisar de SSL, o Event MPM funcionará da mesma forma que o Worker MPM. Veja Como eu escolho qual Apache MPM usar? para mais informações sobre os diferentes módulos MPM.
-
Compactar ou até pré-compactar dados: o uso do conteúdo mod_deflate é compactado antes de ser enviado aos clientes. Como você tem dados estáticos, pode valer a pena pré-compactar o conteúdo em vez de compactar os mesmos dados repetidamente. Consulte o link sobre como realizar isso.
-
Ajustar o sistema operacional: Use grandes buffers de gravação TCP para que menos chamadas de sistema sejam necessárias para enviar os dados solicitados aos clientes. Certifique-se também de que o número máximo de arquivos abertos seja alto o suficiente para que o Apache não tenha esse limite.