5 dicas para aumentar o desempenho do seu servidor da Web Apache

5 dicas para aumentar o desempenho do seu servidor da Web Apache

De acordo com um relatório recente da Netcraft (uma empresa de internet bem conhecida que fornece entre outros serviços estatísticas de uso do navegador da web), Apache continua sendo o servidor web mais usado entre sites e computadores voltados para a Internet.

5 dicas para aumentar o desempenho do servidor da Web Apache

Adicionalmente, Apache continua experimentando o maior crescimento entre os principais servidores da web, seguidos por Nginx e Iis. Assim, se você é um administrador do sistema responsável pelo gerenciamento de instalações do Apache, precisa saber como garantir que seu servidor da web tenha o desempenho da melhor maneira de sua capacidade, de acordo com as necessidades (ou de você).

Neste artigo, discutiremos algumas dicas que ajudarão você a garantir que o Apache funcione sem problemas e possa lidar com o número de solicitações que você espera de clientes remotos.

No entanto, lembre -se de que o Apache não foi projetado com o objetivo de definir registros de referência - mas, mesmo assim, ainda é capaz de fornecer alto desempenho em quase qualquer caso de uso em que você possa pensar.

Dica #1: sempre mantenha o Apache atualizado para sua versão mais recente

Escusado será dizer que ter a versão mais recente do Apache instalada é provavelmente uma das primeiras coisas que você precisa considerar. Em 19 de novembro de 2015, a versão mais recente do Apache disponível no CENTOS 7 Repositórios são 2.4.6, enquanto que entra Debian's é 2.4.10.

No entanto, pode haver uma melhoria recente ou uma correção de bugs que foi adicionada a uma versão estável recém-lançada, que é disponibilizada para download e instalar da fonte. As instruções de compilação e instalação também são fornecidas aqui - lembre -se de que, se você escolher este método de atualização, convém fazer backup de seus arquivos / sites de configuração / hosts virtuais atuais como precaução.

De qualquer forma, você pode verificar sua versão atualmente instalada da seguinte forma:

# httpd -v [em sistemas baseados em redhat/centos] # apache2 -v [em sistemas baseados em Debian/Ubuntu] 
Verifique a versão do Apache

Como regra geral, fique com o método de atualização fornecido pelo gerente de pacotes da sua distribuição escolhida (YUM ATUALIZAÇÃO HTTPD ou Aptidão Apache de upache2, para Centos ou Debian, respectivamente) a menos que não haja outra maneira. Você pode ler as últimas notas de lançamento na seção de documentação do Apache no site do projeto do servidor Apache HTTP.

Dica #2: Se você estiver usando um kernel com mais de 2.4, considere atualizar agora

Por que? Versões do kernel 2.4 e acima tem o sistema de kernel sendfile habilitado por padrão. Isso, por sua vez, facilita as transferências de arquivos de rede de alto desempenho (que são desejadas no contexto das comunicações do Web Server-Client) e permite que o Apache forneça conteúdo estático mais rápido e com menor utilização da CPU, realizando operações de leitura e envio simultâneas.

Você pode ver o seu kernel atualmente instalado com:

# uname -r 

e compare -o com o mais recente kernel estável em www.núcleo.org (4.3 no momento da redação deste artigo).

Verifique a versão do kernel Linux

Embora seja um processo não destinado a iniciantes, a atualização do seu kernel é um exercício interessante para aprender mais sobre os internos do Linux.

Dica #3: Escolha o módulo de multipocessamento (MPM) que funciona melhor para o seu caso

Na prática, Mpms Estenda a funcionalidade modular do Apache, permitindo que você decida como configurar o servidor da web para vincular as portas de rede na máquina, aceitar solicitações de clientes e usar processos (e tópicos, alternativamente) para lidar com essas solicitações.

Começando com a versão 2.4, o Apache oferece três MPMs diferentes para escolher, dependendo de suas necessidades:

  1. O pré -esquecer O MPM usa vários processos infantis sem rosquear. Cada processo lida com uma conexão de cada vez, sem criar tópicos separados para cada. Sem entrar em muitos detalhes, podemos dizer que você deve usar esse MPM apenas ao depurar um aplicativo que usa, ou se o seu aplicativo precisa lidar com módulos que não são seguros como mod_php.
  2. O trabalhador O MPM usa vários fios por processos infantis, onde cada thread lida com uma conexão de cada vez. Esta é uma boa opção para servidores de alto tráfego, pois permite que conexões mais concomitantes sejam tratadas com menos RAM do que no caso anterior.
  3. finalmente, o evento MPM é o MPM padrão na maioria das instalações do Apache para as versões 2.4 e acima. É semelhante ao trabalhador MPM, pois também cria vários tópicos por processo infantil, mas com uma vantagem: causa Mantenha vivo ou parado As conexões (enquanto permanecem nesse estado) a serem tratadas por um único fio, liberando assim a memória que pode ser alocada para outros threads. Este MPM não é adequado para uso com módulos que não são seguros mod_php, para o qual uma substituição tal PHP-FPM Deve ser usado em vez disso.

Para verificar o Mpm Usado pela sua instalação do Apache, você pode fazer:

# httpd -v 

A imagem abaixo mostra que este servidor da web específico está usando o Prefork MPM.

Verifique o Apache MPM

Para mudar isso, você precisará editar:

#/etc/httpd/conf.módulos.d/00-mpm.conf [em sistemas baseados em redhat/centos] #/etc/apache2/mods-anabilable/.Carregar [em sistemas baseados em Debian/Ubuntu] 

Onde pode estar mpm_event, mpm_worker, ou mpm_prefork.

e descomamento a linha que carrega o módulo desejado como assim:

LoadModule mpm_event_module módulos/mod_mpm_event.então 

Observação: Para fazer o evento MPM funcionar no Debian, você pode ter que instalar o libapache2-mod-fastcgi pacote dos repositórios não livres.

Além disso, para o CentOS, você precisará PHP-FPM (juntamente com FCGI e mod_fcgid) enquanto que no Debian é chamado PHP5-FPM (juntamente com APACHE2-MPM-EVENT).

Por último, mas não menos importante, reinicie o servidor da web e o recém -instalado PHP-FPM (ou PHP5-FPM) serviço:

Em redhat/centos

# Systemctl reiniciar httpd php-fpm && systemctl atabille httpd php-fpm 

No Debian/Ubuntu

# SystemCtl Restart Apache2 php5-fpm && systemctl Ativar apache2 php5-fpm 

Embora você possa definir o Apache para usar um MPM específico, essa configuração pode ser substituída por um host por virtual da mesma maneira que indicado anteriormente.

Basta soltar as tags correspondentes no arquivo de configuração de cada host virtual e você está pronto para ir - mas verifique se está usando um e apenas um mpm por vhost.

Finalmente, observe que, independentemente da distribuição escolhida, PHP-FPM confia na implementação de Fastcgi, Qual é a razão pela qual eu recomendei as instalações adicionais do pacote anteriormente.

Para mais detalhes e exemplos em PHP-FPM E como pode, juntamente com o evento, o MPM aumenta o desempenho do Apache, você deve consultar a documentação oficial.

É isso que vejo depois de alterar o MPM padrão do pré -esquecimento para o evento na mesma caixa mostrada na imagem anterior:

Escolha o módulo Apache MPM

Em CENTOS 7, você precisará garantir que o http e https Os serviços são ativados através do firewall e que as interface (s) de rede são adicionadas corretamente à zona padrão.

Por exemplo:

# firewall-cmd-zone = interno --add-interface = tun6to4 # firewall-cmd-zone = interno --add-interface = tun6to4 --permanent # firewall-cmd --set-default-zone = interno # firewall -cmd --add-service = http # firewall-cmd --add-service = https # firewall-cmd --add-service = http --permanent # firewall-cmd --add-service = https --permanent # firewall -CMD - -Reload 

A razão pela qual estou mencionando isso é porque recentemente experimentei um problema em que as configurações de configuração do firewalld padrão em um VPS em nuvem evitavam PHP-FPM e Apache do processamento de arquivos PHP.

Como teste básico (tenho certeza de que você pode pensar em mais complicados ou estressantes), criarei um arquivo php que verifique a existência de outro arquivo nomeado teste.php No mesmo diretório de dois servidores do CentOS 7 com as mesmas características e carga de hardware, mas com MPM diferente. Um deles usará o evento e o outro usará o Prefork:

Compare o evento Apache e o módulo de pré -esquecimento

Este é o código PHP que eu salvei em um arquivo chamado checkfileExists.php:

 

Em seguida, executaremos a ferramenta Apache Benchmark (AB) com 200 solicitações simultâneas até 2000 Os pedidos são concluídos:

# ab -k -c 100 -n 2000 localhost/checkfileExists.php 

Vamos executar o teste e comparar os resultados. Preste atenção às estatísticas de desempenho:

Teste de carga de desempenho apache

Como você pode ver, o desempenho do servidor com evento é altamente superior ao seu pré -esquecer contraparte em todos os aspectos deste teste.

Dica #4: aloce Ram com sabedoria para o Apache

Talvez o item de hardware mais crítico a ser levado em consideração seja o valor de BATER alocado para cada processo Apache. Embora você não possa controlar isso diretamente, você pode restringir o número de processos infantis através do MaxRequestWorkers diretiva (anteriormente conhecida como Maxclients em Apache 2.2), que colocará limites para o uso da RAM por Apache. Novamente, você pode definir esse valor em um host por host ou por host virtual.

Para fazer isso, você deve tomar nota da quantidade média de RAM usada pelo Apache e multiplique -a pelo número de MaxRequestWorkers, E essa é a quantidade de memória que será alocada para processos Apache. Uma coisa que você nunca deseja que seu servidor da web faça é começar a usar a troca, pois isso diminuirá significativamente seu desempenho. Assim, você deve sempre manter o uso de RAM por Apache dentro dos limites que você pode pagar e nunca confiar na troca.

Por exemplo, o bloco a seguir restringirá o número de clientes simultâneos a 30. Se mais clientes chegarem ao host, eles podem sofrer um atraso ou uma insuficiência momentânea que pode ser facilmente resolvida, refrescando o navegador. Embora isso possa ser considerado indesejável, é mais saudável para o servidor e, a longo prazo, melhor para o seu site também.

Você pode colocar este bloco dentro /etc/httpd/conf/httpd.conf ou /etc/apache2/apache2.conf, Dependendo se você está usando o CentOS ou Debian.

Observe que o mesmo princípio se aplica a todos Mpms - Estou usando o evento aqui para continuar com o conceito descrito na dica anterior:

 StartServers 3 minsparethreads 25 maxsparethreads 75 threadlimit 64 threadsperchild 25 maxrequestworkers 30 maxconnectionsperchild 1000  

De qualquer forma, é altamente recomendável que você se refira ao Apache 2.4 documentos para ver quais diretrizes são permitidas para o seu MPM escolhido.

Dica #5: conheça seus aplicativos

Como regra geral, você não deve carregar nenhum módulo Apache que não seja estritamente necessário para que seu aplicativo funcione. Isso exigirá pelo menos um conhecimento geral dos aplicativos em execução em seu servidor, especialmente se você é um administrador do sistema e há outra equipe responsável pelo desenvolvimento.

Você pode listar os módulos atualmente carregados com:

# httpd -m [em sistemas baseados em redhat/centos] # apache2ctl -m [em sistemas baseados em Debian/Ubuntu] 

Para descarregar / desativar módulos em CENTOS, Você precisará comentar a linha que começa com LoadModule (seja no arquivo de configuração principal ou em um auxiliar dentro /etc/httpd/conf.módulos.d.

Por outro lado, Debian fornece uma ferramenta chamada A2Dismod Para desativar módulos e é usado da seguinte maneira:

# a2dismod module_name 

Para ativá -lo de volta:

# a2enmod module_name 

Em ambos os casos, lembre -se de reiniciar o Apache para que as mudanças tenham efeito.

Resumo

Neste artigo, revisamos 5 dicas Isso ajudará você a ajustar o servidor da Web Apache e aumentar seu desempenho. Além disso, você deve se lembrar de que otimização e desempenho sem segurança são inúteis, portanto, convém consultar o artigo Mod_Pagespeed para melhorar o desempenho do servidor da web e dicas de endurecimento do Apache no Tecmint.com também.

Como não podemos cobrir adequadamente todos os aspectos deste tópico neste artigo, talvez você pense em outras idéias que gostaria de compartilhar com o resto da comunidade. Nesse caso, sinta -se à vontade para nos informar usando o formulário de comentário abaixo.