Apache : Tuning do modo Worker

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

 

Captura de Tela 2015-04-11 às 16.13.44

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

 

Captura de Tela 2015-04-11 às 18.25.34

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/

Captura de Tela 2015-04-11 às 19.02.18

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/