Neste post vou apresentar como fazer tuning do Apache em modo Worker .
Para realizar os testes estou usando o Apache pré-compilado no link abaixo.
http://fajlinux.com.br/linux/apache-2-4-12-pacote-compilado/
1) Introdução :
Prefork:
Prefork lança vários processos child. Cada processo child abre uma conexão de cada vez.
O modo Prefork usa muita memória em comparação ao Worker MPM. Este é o MPM padrão usado pelo servidor Apache e sempre usa o minimo de MinSpareServers, por isso os novos pedidos não precisam esperar por um novo processo para começar.
Worker:
Worker gera varios processos child semelhantes ao prefork. Cada processo child corre muitos tópicos. Cada segmento trata de uma conexão de cada vez.
No modo Worker MPM implementa um multi-processo de servidor multi-threaded híbrido. O worker MPM usa pouca memória em comparação com Prefork MPM.
2) Vendo se o servidor está no modo worker
Para ver se o seu Apache está em modo worker devemos rodar o comando abaixo:
cd /opt/open/apache/2.4.12/bin ./httpd -V
3) Configuração do Worker :
cd /opt/open/apache/2.4.12/conf/ vim httpd.conf <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
* MaxClients – é o número total de processos httpd filho que podem ser processados simultaneamente. O valor padrão é bastante alto para a maioria dos servidores (256).
* StartServers: número inicial de processos.
* MinSpareServers: número de processos iniciais iddle à espera de um pedido.
É recomendado usar a configuração de acordo com o total de RAM:
Virtual Private Server 5
Dedicated server with 1-2GB RAM 10
Dedicated server with 2-4GB RAM 20
Dedicated server with 4+ GB RAM 25
* MaxSpareServers: número máximo de processos aguardando iddle.
* MaxRequestsPerChild: quando um processo excede este valor, o processo é destruído e, se necessário, um novo processo substitui. Isso pode reduzir o total de memória usado em muitas situações, com arquivos dinâmicos constantemente aumentando a sua utilização de RAM e reiniciar os processos para reduzir seu uso.
* ServerLimit: se queremos aumentar o número total de MaxClients 256-300, devem, em princípio aumento ServerLimit a mesma quantidade.
* KeepAlive: O padrão é off. Estar em, permitimos que a mesma conexão TCP para fazer várias solicitações, sem descartar a conexão (conexões persistentes).
* MaxKeepAliveRequests: o número total de pedidos permitidos por uma única conexão TCP.
* KeepAliveTimeout: O número máximo de segundos que o processo continua à espera de ser atendida.
4) Cálculo de Recursos :
Em nossa vm de teste temos 1 Gbs de RAM .
MaxClients = Total de RAM dedicada ao servidor web / max size do processo filho
Para pegarmos o valor do processo do Apache usamos o comando
ps -aylC httpd
4492/1024 = 4,38 Mbs
Usamos o comando abaixo para saber quantos processos do Apache estão abertos :
lsof -i | grep httpd | grep ESTABLISHED | wc -l
Vamos supor que 15 processos foram abertos no servidor e sabemos que o consumo de memória RAM de cada processo é de 4,38 Mbs , sendo assim temos :
4,38 x 15 = 65,7 Mbs .
5) Otimização :
Mesmo com o cálculo base de tuning , uma boa prática seria desabilitar os módulos que não são usados no Apache.
Outra opção que afeta negativamente o desempenho é a “HostNameLookups”, onde o Apache verifica a origem de cada acesso, fazendo uma busca de domínio. Ativar essa opção permite criar estatísticas de acesso mais detalhadas, incluindo os países e provedores de acesso usados pelos visitantes, mas tem um impacto negativo muito grande na performance de um servidor congestionado. No Apache 2 ela já vem desativada por padrão, mas em versões antigas era necessário desativá-la manualmente:
HostNameLookups Off
Uma ferramenta que pode contribuir para realizar testes de estresse e arredondar o apache de acordo com o seu consumo é o Apache Benchmarking tool , no RHEL instalamos esta ferramenta com o pacote httpd-tools (yum install httpd-tools).
No exemplo abaixo estou fazendo 100 requisições sendo que 5 são simultâneas.
ab -n 100 -c 5 http://fajlinux.com.br/
Para medir o consumo de memória do SO X Apache também há um tempo atrás postei um script para medir este consumo no link abaixo :
http://fajlinux.com.br/scripts/script-de-tunning-do-apache/