Como aumentar as conexões simultâneas no Apache

Hoje venho falar mais uma vez sobre um dos serviços web mais usados ​​no mundo: o servidor web Apache2.

É um assunto que já foi falado muitas vezes, mas agora venho falar sobre outro recurso a levar em consideração com este serviço: O limite de conexões simultâneas. Não importa se temos muito básico ou uma nave espacial com processador i7 e 32 GB de RAM ...

O limite de conexões simultâneas será sempre o mesmo, a menos que tomemos as medidas cabíveis, o que significa que se quisermos ter muitas pessoas conectadas ao mesmo tempo, não vamos exigir apenas um bom hardware, mas também uma boa configuração.

Neste caso, não é necessário instalar nada, tudo é baseado em conceitos simples que devem ser levados em consideração para configurar o apache; conceitos que devem ser muito claros antes de querer fazer qualquer alteração.

logotipo_apache2

A primeira coisa a pensar é: Qual é a capacidade da minha equipe? Quantas conexões simultâneas meu equipamento pode suportar se eu forçar tanto quanto possível? Tudo isso depende de um único fator; RAM (memória de acesso aleatório).

Quanto maior a RAM, maior o número de conexões, embora não haja um valor fixo (ou seja, X clientes para cada X ram), por isso, antes de mais nada, é importante fazer alguns pequenos cálculos em nosso servidor web, com o a fim de conhecer nossos limites.

A primeira coisa que você deve saber é quanta memória RAM em média consome cada conexão com o Apache, já que cada conexão estabelecida supõe um certo consumo de RAM no sistema ... Obviamente nem todas as conexões consomem a mesma RAM, com a qual você teria que fazer um mídia ... Tudo isso pode ser obtido com o seguinte comando:

ps -ylC apache2 --sort: rss | awk '{SUM + = $ 8; I + = 1} END {print SUM / I / 1024} '

O resultado obtido seria representado em megabytes e pode variar em função do número de conexões ativas, do tipo de páginas acessadas, etc ... Portanto, é aconselhável realizar o teste com diferentes abas abertas; cada um deles mostrando conteúdos diferentes se possível. No meu caso, por exemplo, o resultado foi 9.5458, que se arredondarmos para o topo seria 10 MB RAM consumida em média por conexão.

Também é importante saber quanta RAM é consumida pelos demais processos que estão ativos no sistema, já que o serviço web não é o único que roda no sistema operacional e é necessário deixar memória RAM livre no servidor para que possa executar o resto das tarefas. Isso pode ser obtido com o comando mostrado abaixo:

ps -N -ylC apache2 --sort: rss | awk '{SUM + = $ 8} END {print SUM / 1024}'

O resultado obtido também seria representado em megabytes e nos mostraria com bastante precisão a quantidade de RAM consumida pelo resto dos processos; no meu caso 800 MB. Com esta informação poderíamos fazer um cálculo geral do número de conexões simultâneas que poderíamos ter; Calculo que obteríamos através de uma operação muito simples.

(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

Com esta fórmula em mãos, vamos imaginar que temos um computador com 4 GB de RAM, ou seja, 4096 MB e que nosso computador apresentou os resultados citados; o cálculo seria:

(4096 - 800) / 10 = 329 conexões simultâneas

O problema desse cálculo é que um é muito extremo, pois consumiria toda a RAM (fazendo com que o servidor consuma a troca) e também, no caso de ter um banco de dados, como MySQL ou qualquer outro, as conexões para ele também consumiriam RAM, então o número obtido pode ser qualificado como um número utópico. Portanto, a fim de liberar memória para possíveis processos adicionais e também considerar a possibilidade de que conexões com um banco de dados sejam executadas, reduziríamos o número de conexões para 250.

Agora que temos nosso número máximo de conexões simultâneas, teríamos que preparar o Apache para receber este número, o que é feito no arquivo de configuração desta chamada apache2.conf, que está hospedado em / etc / apache2.

O arquivo em questão segue uma estrutura baseada em módulos, cada um com seu nome correspondente, mas estaríamos interessados ​​apenas em um deles, cujo nome é  mpm_prefork_module. O módulo em questão possui os seguintes dados por padrão:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0

Este módulo contém uma série de parâmetros muito importantes, embora exista um deles que nos interessaria particularmente, denominado MaxClients. Este parâmetro especifica o número máximo de conexões simultâneas e deve ser modificado para 250.

Um detalhe a ter em conta é que quando se especifica um valor diferente do padrão no referido parâmetro, é necessário adicionar mais um ANTES deste. Este parâmetro é chamado ServerLimit e define o limite de conexões que o servidor pode "manter" mesmo quando está fora do limite.

O parâmetro ServerLimit sempre tem que ser um pouco maior que o MaxClients e aqui, como há pouco espaço de manobra, um limite de 270. Isso faria com que o módulo tivesse a seguinte aparência:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 270 MaxClients 250 MaxRequestsPerChild 0

Agora só seria necessário reiniciar o serviço Apache usando o comando: 

/etc/init.d/apache2 reinicie

Com isso já pudemos desfrutar de nosso servidor web otimizado.

Saudações.