Como funciona
A seguir temos uma configuração padrão do MPM Worker, dentro do arquivo httpd.conf
<IfModule worker.c> ThreadLimit 25 ServerLimit 16 StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
Com essa configuração, ao iniciarmos o Apache, ele vai criar 2 processos filhos (StartServers), e cada processo filho vai iniciar 25 threads (ThreadsPerChild). Nessa situação vamos suportar 50 conexões/clientes simultâneas.
Inicial ==> StartServers x ThreadsPerChild ==> 2 x 25 = 50
A medida que novos usuários entram no sistema, um novo processo filho sera criado, adicionando mais 25 threads de atendimento. A variável ServerLimit define a quantidade de processos filhos que poderao ser criados:
Maximo ==> ServerLimit x ThreadsPerChild ==> 16 x 25 = 400
Mas como o valor definido na variável MaxClients é 150, o Apache obedece a esse parâmetro e permite a criacao de apenas 6 processos filhos (150/25 threads = 6). Se o valor da variável MaxClients for superior a 400, neste caso o Apache obedece ao valor obtido através da multiplicação das variáveis ServerLimit e ThreadsPerChild.
Nessa situação podemos suportar de [ 50 .. 150 ] conexões/clientes simultâneas.
Configurando para um Apache para Alto Trafego
Por exemplo no meu arquivo httpd.conf dentro do IBM HTTP Server/Apache Server.
<IfModule worker.c> ThreadLimit 50 ServerLimit 180 StartServers 10 MaxClients 4500 MinSpareThreads 25 MaxSpareThreads 4500 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
Inicial ==> StartServers x ThreadsPerChild ==> 10 x 25 = 250 Maximo ==> ServerLimit x ThreadsPerChild ==> 180 x 25 = 4500 Maximo ==> MaxClients (4500)
Nessa situação podemos suportar de [ 250 .. 4500 ] conexões/clientes simultâneas.