O Apache é um servidor web de código aberto poderoso, projetado para fornecer um equilíbrio de flexibilidade, portabilidade e desempenho. A otimização do Apache é uma tarefa importante para todo administrador de sistema.
Personalizando algumas configurações do Apache, é possível melhorar o desempenho sem adicionar hardware adicional, como RAM, CPU, etc.
Este post descreve várias opções de configuração do Apache que podem ser usadas para melhorar o desempenho do Apache sem adicionar recursos de hardware adicionais ao seu servidor.
Estas sugestões de configuração podem ser aplicadas a qualquer servidor executando o Apache 2.xx. Para simplificar a explicação, abaixo vamos abordar um servidor CentOS 7 com o Painel CentOS Web Panel .
Se não sabe onde está o httpd.conf de seu servidor web, sugiro utilizar o comando Locate. Veja Como instalar o Locate.
No CentOS 7 com Painel CentOS WebPanel edite o arquivo httpd.conf .
Nota: Caso não encontre as opções abaixo, você pode seguramente adicionar os valores após a ultima linha do seu arquivo httpd.conf
nano /usr/local/apache/conf/httpd.conf
MaxKeepAliveRequests
MaxKeepAliveRequests é o número máximo de solicitações a serem atendidas em uma conexão TCP. Esta função limita o número de solicitações permitidas por conexão. Se estiver definido como 0 (ou não definidas no arquivo), serão permitidas solicitações ilimitadas.
Mantenha essa configuração com um valor alto para o desempenho máximo do servidor.
O valor recomendado de MaxKeepAliveRequests é 500.
MaxKeepAliveRequests 500
KeepAliveTimeout
KeepAliveTimeout define o número de segundos que o Apache irá aguardar pela nova solicitação do cliente conectado, antes de fechar a conexão. (Uma vez que o servidor recebe uma requisição, a diretiva Timeout se aplica.)
O KeepAliveTimeout recomendado pode estar entre 1 a 5.
KeepAliveTimeout 5
KeepAlive
KeepAlive define se o servidor permite mais de uma solicitação por conexão. Ele pode ser usado para impedir que qualquer cliente consuma muitos dos recursos do servidor.
Por padrão, o KeepAlive está desabilitado no CentOS 7.
Uma vez que o servidor Apache está recebendo solicitações de centenas e milhares de IPs de uma só vez, essa configuração deve estar ativada.
KeepAlive On
DNS Lookups
Um grande motivo para a lentidão do servidor web Apache é o tempo necessário para realizar pesquisas de DNS. Se a opção HostnameLookups estiver on, o Apache tentará registrar o nome completo do host de cada conexão do cliente de entrada no arquivo access.log. Resolver cada nome irá demandar um pedaço significativo de tempo.
Por padrão, HostnameLookups está desativado no Apache. De qualquer forma utilize
HostnameLookups Off
Configurando MPM Prefork
O módulo MPM (Módulo de Multi-Processamento) implementa um servidor web sem encadeamento e pré-bifurcado. O Apache trabalha como padrão com o MPM Prefork. Existem ainda outros MPM como ITK , WORKER, EVENT que não iremos abordar neste post. O MPM Prefork é o mais utilizados por SysAdmins por conta de sua compatibilidade com os mais diversos hardwares, sistemas e eslabilidade.
Abaixo vamos abordar como melhorar o desempenho do Apache utilizando o módulo Apache MPM Prefork e explicar cada uma das opções:
Se você utiliza o Apache com o CentOS 7 e CentOS Web Panel, edite o arquivo httpd.conf
nano /usr/local/apache/conf/httpd.conf
localize e descomente a linha abaixo de “Server-pool management (MPM specific)” removendo o # :
Include conf/extra/httpd-mpm.conf
Agora vamos editar o arquivo httpd-mpm.conf. Porém, antes de fazer alterações, recomendo fazer um backup do arquivo:
cp /usr/local/apache/conf/extra/httpd-mpm.conf /usr/local/apache/conf/extra/httpd-mpm.conf.backup
Edite o arquivo httpd-mpm.conf , localize e substitua os valores dentro de “IfModule mpm_prefork_module“
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 3000
StartServers: define o número de processos do servidor filho, criados na inicialização. É uma boa ideia aumentar esse número em um servidor de alta carga, para que o servidor esteja pronto para lidar com muitas conexões.
MinSpareServers: define o número mínimo de processos do servidor filho ocioso. Esse valor precisará ser ajustado para servidores de alta carga.
MaxSpareServers: define o número máximo de processos do servidor filho ocioso. Quando houver mais processos do servidor filho ociosos do que os definidos pelo MaxSpareServers, o processo ocioso será eliminado.
MaxRequestWorkers: define o número máximo de solicitações simultâneas que o Apache irá tratar. Quando esse limite for atingido, qualquer outra tentativa de conexão será enfileirada.
Nota: Talvez o item de hardware mais crítico a ser levado em consideração seja a quantidade de RAM alocada para cada processo do Apache. Embora não seja possível controlar o uso diretamente, você pode restringir o número de processos filho por meio da diretiva MaxRequestWorkers (anteriormente conhecida como MaxClients no Apache 2.2), o que colocará limites no uso da RAM pelo Apache.
MaxRequestsPerChild: esta diretiva define quantas solicitações um processo filho manipulará antes de finalizar. Quando o limite for atingido, o processo filho morrerá.
Nota: Se este valor for 0, o processo nunca morrerá, obviamente consumindo mais recurso do servidor.
Conclusão
Configurar o Apache para o máximo desempenho é muito fácil. Porém, em servidores com alto tráfego sejrá necessário otimizar as configurações aqui tratadas para um resultado excelente.
Você pode experimentar as várias opções disponíveis e medir o desempenho do servidor da Web com ferramentas como ab e httperf.