Instalar um LAMP com boa performance

Este artigo demonstra como realizar a instalação de um servidor web LAMP (Linux, Apache, MySQL e PHP), incluindo suas configurações além de questões relacionadas com a performance desse ambiente. A distribuição utilizada será o Ubuntu Server 20.04.1 LTS.

[ Hits: 710 ]

Por: Diego Mendes Rodrigues em 02/09/2020 | Blog: https://www.linkedin.com/in/diegomendesrodrigues/


Melhorar a Performance do seu Servidor Apache



De acordo com a pesquisa mais recente da Netcraft, o Apache continua sendo o servidor web mais utilizado atualmente, seguido pelo Nginx e pelo IIS da Microsoft. Desta forma, caso você seja um administrador de sistemas encarregado de gerenciar servidores web, o ideal é que consiga deixá-los operando com as necessidades de seus clientes. Neste material irei discutir algumas dicas de como certificar-se que o Apache seja executado de forma suave sendo capaz de lidar com o número de solicitações que você deseja.

Sempre mantenha seu Apache atualizado para a última versão

Eu não deveria dizer isso, mas, estar com a última versão do Apache instalado é provavelmente a primeira ação que você deve considerar, e executar!

Embora as últimas versões possam não estar disponíveis nos pacotes atuais no repositório de sua distribuição (Ubuntu, Debian, CentOS etc), elas estão publicadas instalação estão disponíveis nesse link: https://httpd.apache.org/docs/2.4/install.html. Lembre-se de realizar o backup de suas configurações atuais que estão em /sites* /virtualhosts*, ou em qualquer outro local que você tenha armazenado.

Para verificar a versão que você possui instalada, utilize:

apache2 --v
Você pode atualizar seu Apache de forma segura, utilizando o comando apt.

sudo apt upgrade apache2

Caso você esteja utilizando o Kernel em uma versão anterior a 5.4, considere atualizar agora

A versão 5.4 é extremamente segura, com uma excelente performance para as redes de computadores e transferência de arquivos, que são muito utilizadas nos servidores web, habilitando também o Apache a realizar a entrega de conteúdos estáticos (HTML, CSS, JavaScript, TXT etc) de forma rápida, utilizando muito pouco do CPU do servidor.

Para verificar a versão do seu Kernel, utilize o comando uname.

uname -r
Depois compare com a versão mais atual, no site https://www.kernel.org. Quando escrevi esse artigo, a versão mais atual estável era a 5.8.5.

Embora a atualização do Kernel não seja um processo destinado aos iniciantes, essa tarefa é muito interessante e faz com que você aprenda mais sobre a tecnologia envolvida no Linux. Busque na internet como atualizar e teste primeiro em uma máquina virtual, ao invés de realizar a ação direto em um de seus servidores.

Aloque a memória RAM de forma sábia para o seu Apache

Provavelmente o item de hardware mais crítico que deva ser levado em consideração, diz respeito a quantidade de memória RAM alocada para cada processo do Apache. Embora você não possa controlar esse alocamento diretamente, pode restringir o número de processos filhos através da diretiva MaxRequestWorkers (conhecida como MaxClients no Apache 2.2), que irá limitar a quantidade de memória RAM utilizada pelo Apache. Você pode definir esse valor por hosts, ou por hosts virtuais.

Para realizar essa configuração você deve levar em consideração a quantidade de memória RAM utilizada pelo Apache, então multiplicar esse valor pelo número definido em MaxRequestWorkers, sendo então essa a memória RAM que será alocada pelos processos do Apache. Lembre de sempre disponibilizar a memória do Apache de acordo com a memória física do seu hardware, sem utilizar a memória swap.

No exemplo abaixo, irei restringir o número de clientes simultâneos para 30. Caso um número maior tente realizar a conexão com o host, irão encontrar uma experiência com um delay (atraso), ou uma falha de conexão, que pode ser resolvida atualizando a página no navegador. Embora esse valor possa ser considerado indesejável em muitos servidores web, lembre-se de sempre realizar uma configuração condizente com seu hardware e suas necessidades.

A configuração exposta abaixo deve ser realizada no arquivo /etc/apache2/apache2.conf em um servidor Ubuntu 20.04 LTS.

<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadLimit              64
    ThreadsPerChild          25
    MaxRequestWorkers        30
    MaxConnectionsPerChild   1000
</IfModule>

Caso queira conhecer mais configurações do Apache, visite a página oficial da documentação:

Defina o Multi-Processing Module (MPM) que funciona melhor para o seu caso

Na prática, MPMs estendem as funcionalidades modulares do Apache, habilitando ao administrador de sistemas em decidir como configurar as conexões do servidor web com a máquina, aceitando as requisições dos clientes, além de utilizar os processos filhos (ou threads), para lidar com esses pedidos.

A partir da versão 2.4 do Apache, existem 3 diferentes MPMs que podem ser utilizados, de acordo com suas necessidades:
  • prefork MPM: utiliza múltiplos processos filhos, sem utilizar threads. Cada processo lida com uma conexão de uma vez, sem a criação de threads para cada uma delas. Sem entrar em muitos detalhes, posso dizer que você deve utilizar essa MPM quando estiver realizando o debug de uma aplicação, através da utilização do módulo non-thread-safe como o mod_php.
  • worker MPM: utiliza diversas threads em cada processo filho, onde cada thread atende a uma conexão por vez. Esta é uma boa escolha para servidores de alto desempenho, habilitando lidar com mais conexões simultâneas, utilizando muito menos memória do que no caso anterior.
  • event MPM: este é o modo padrão de MPM ao realizarmos a instalação do Apache na versão 2.4 ou superior. Funciona de forma parecida ao worker, criando múltiplas threads para cada processo filho, mas com uma vantagem: ela causa conexões KeepAlive ou idle (enquanto elas mantém este estado), para serem tratadas por uma única thread, liberando assim a memória RAM que pode ser alocada para outras threads. Esta MPM não é adequada para ser utilizada com módulos non-thread-safe como o mod_php, sendo que, neste caso, seria melhor a substituição pelo PHP-FPM.

Para verificar o MPM utilizando na instalação do seu Apache, utilize:

sudo apachectl -M
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
mime_module (shared)
mpm_prefork_module (shared)
negotiation_module (shared)
php7_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
status_module (shared)


Observe que no meu caso, o módulo mpm_prefork_module está carregado no Apache, ficando claro que utilizo o prefork neste servidor web.
Para alterar o MPM utilizado, devemos alterar o arquivo:

sudo nano /etc/apache2/mods-available/<mpm>.loa

Sendo <mpm> uma das seguintes opções: mpm_event, mpm_worker, ou mpm_prefork.
Além disso, devemos descomentar a linha que carrega o módulo, como por exemplo:

LoadModule mpm_event_module modules/mod_mpm_event.so

Por último, reiniciar o Apache da seguinte forma:

sudo systemctl restart apache2 php5-fpm
sudo systemctl enable apache2 php5-fpm

Conheça suas aplicações

Como um princípio básico, você nunca deve carregar um módulo do Apache que não seja estritamente necessário para o trabalho de suas aplicações nesse servidor. Isto requer um conhecimento das aplicações que estão sendo executadas, além de seu funcionamento, especialmente se você desempenhar o papel de administrador de sistemas dessa máquina.

Para listar os módulos carregados utilize:

apache2ctl -M

Para desabilitar um módulo no Apache no servidor com o Ubuntu, utilize:

sudo a2dismod module_name

Para habilitar novamente, utilize:

sudo a2enmod module_name

Sempre que executar um dos comandos acima, você deve reiniciar o Apache.

sudo systemctl restart apache2

CONCLUSÕES

Espero que o conteúdo deste artigo ajude você a instalar e gerenciar melhor seus servidores web!

Me conte se você já utilizar o Apache e em que tipo de aplicação.

Página anterior    

Páginas do artigo
   1. Instalar o LAMP no Ubuntu 20.04 LTS
   2. Melhorar a Performance do seu Servidor Apache
Outros artigos deste autor

Instalar o GeoServer no Ubuntu

Instalar o Ubuntu Server

MultiCD - Diversas Distribuições no mesmo DVD/Pendrive

Nmap - Escaneando sua Rede e Mantendo-a Segura

Instalando Adicionais para Convidados para VirtualBox no Debian, Linux Mint e Ubuntu

Leitura recomendada

Configurando o Arch Linux

Backup com Rsync

Sistema de boot, níveis de execução e shutdown

O dia em que o KDE me surpreendeu

Montagem de Cluster Beowulf

  
Comentários
[1] Comentário enviado por mauricio123 em 03/09/2020 - 13:12h


Muito bom. Está bem completo.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[2] Comentário enviado por viroguim em 05/09/2020 - 16:39h

Muito maneiro, tutorial excelente !!
Obrigado.

[3] Comentário enviado por baza em 24/09/2020 - 18:22h

Difícil encontrar um tutorial sobre o assunto com esta qualidade!
Após longo tempo consegui instalar no meu Linux Mint 20. No final o deu problemas com o phpmyadmin que resolvi da seguinte forma:
Voltei a instalação do phpmyadmin respondendo "não" a 2a.pergunta, visto que já tinha banco de dados no mysql. Depois editei o arquivo /etc/apache2.config
adicionando a seguinte linha no final: Include /etc/phpmyadmin/apache.conf
Finalmente é necessário reiniciar o apache 2 com sudo service apache2 restart
Aí coloque no browser http:localhost/phpmyadmin e surgiu a tela que tanto queria!
Abraço e obrigado!

[4] Comentário enviado por mauricio123 em 24/09/2020 - 23:53h


[3] Comentário enviado por baza em 24/09/2020 - 18:22h

Difícil encontrar um tutorial sobre o assunto com esta qualidade!
Após longo tempo consegui instalar no meu Linux Mint 20. No final o deu problemas com o phpmyadmin que resolvi da seguinte forma:
Voltei a instalação do phpmyadmin respondendo "não" a 2a.pergunta, visto que já tinha banco de dados no mysql. Depois editei o arquivo /etc/apache2.config
adicionando a seguinte linha no final: Include /etc/phpmyadmin/apache.conf
Finalmente é necessário reiniciar o apache 2 com sudo service apache2 restart
Aí coloque no browser http:localhost/phpmyadmin e surgiu a tela que tanto queria!
Abraço e obrigado!


bacana cara.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts