Como otimizar a velocidade do Apache para servir conteúdo estático?

5

Estou bem ciente de que o ngix é muito melhor para conteúdo estático, mas não posso usá-lo. Caso contrário, eu tenho acesso total ao meu servidor (VPS).

Encontrei vários artigos e postagens sobre como otimizar o apache, mas sempre sobre o desempenho de aplicativos PHP.

Estou usando o mais recente Apache 2.4.7

Eu já estou usando o MPM. Eu estava pensando em ajustar KeepAlive MaxClients etc. para desempenho (conteúdo estático), se faz algum sentido?

    
por Badr Hari 29.05.2015 / 18:27

2 respostas

7

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 defina AllowOverride 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.

por 03.07.2015 / 11:19
2
O

KeepAlive normalmente faz muito sentido, requer mais memória, mas reduz o número de conexões, o uso da CPU e a sobrecarga de conexões. MaxClients e outras coisas devem estar sintonizados na sua situação. Normalmente, você desejará que o Apache tenha um número de instâncias ociosas grandes o suficiente para atender a todos os seus usuários, sem que isso implemente novos processos filhos o tempo todo; ao mesmo tempo, você quer evitar valores excessivos para maxclients para manter o uso de memória sob controle. A menos que você tenha picos repentinos de uso, as configurações padrão do Apache são geralmente adequadas e se adaptarão bem ao seu ambiente.

Se você veicular conteúdo por meio de https e já que não está usando php, convém testar o módulo mod_spdy, mas muitos navegadores já o suportam (esperando por um suporte global para http 2.0).

Finalmente, outra opção é usar o armazenamento em cache / precaching. A esse respeito, algumas funcionalidades já estão disponíveis no Apache graças a vários módulos (consulte link ) ou você pode colocar outra coisa na frente do servidor (o verniz é uma opção popular).

    
por 02.07.2015 / 15:28