Apache 2.4 - Módulos de Multiprocessamento - MPM

Com a versão 2.4 no Debian Jessie, a MPM event entrou em estado de produção. Neste artigo, vamos diferenciar "prefork", "worker" e "event" para entender um pouco mais seu funcionamento. As informações são baseadas no manual do Apache 2.4.

[ Hits: 34.855 ]

Por: Perfil removido em 04/08/2014


MPM event



Esse MPM é uma variante de worker, elaborada para permitir mais requisições simultâneas utilizando intensamente os threads. Vejamos como isso funciona na prática.

Esse MPM tenta solucionar o problema keep alive presente no servidor HTTPD. Um cliente HTTP sempre tenta manter a conexão aberta e enviar mais requisições pelo mesmo socket. Isso representa uma sobrecarga para TCP que gerencia a abertura e o fechamento das conexões. Tradicionalmente, a abordagem utilizada por Apache é manter um processo filho e seus threads aguardando por novas requisições o que representa desvantagens óbvias.

Para tentar solucionar essa questão, a MPM event realiza uma abordagem diferente utilizando um thread dedicado para manipular os sockets, que ouvem por conexões, ao mesmo tempo que utiliza outros threads para enviar e receber dados de conexões já estabelecidas.
Para alguns casos de uso, alguns filtros se declaram incompatíveis com event e voltam a se comportar como se estivessem sendo utilizados por worker, reservando um thread por conexão. Todos os módulos providos juntamente com Apache são compatíveis com event.

Observe que muitas das diretivas de worker são válidas também para event.

AsyncRequestWorkerFactor - limita o número de conexões concorrentes por processo. A MPM event manipula algumas conexões de modo assíncrono. Requisições que trabalham com threads são alocadas por um período de tempo curto, conforme necessário, e outras requisições com um thread reservado por conexão. Isso pode levar a situação onde todos os workers estão ocupados e não há threads disponíveis para manipular novas solicitações assíncronas de conexão.

Para mitigar esse problema, event faz duas coisas. Inicialmente, ele limita o número de conexões aceitas por processo, dependendo do número de workers idle. Posteriormente, se todos os workers estão ocupados, ele fechará conexões que estão no estado keep alive mesmo se o timeout não tenha sido atingido.

Essa diretiva permite um ajuste mais fino (tunning) do limite das conexões por processo. Um processo somente aceitará novas conexões se o número de conexões correntes ( conexões em estado closing não são contadas) for menor que:
  • ThreadsPerChild + (AsyncRequestWorkerFactor * número de idle workers)

Isso significa que o número máximo de conexões concorrentes é:
  • (AsyncRequestWorkerFactor + 1) * MaxRequestWorkers

Página anterior    

Páginas do artigo
   1. Conceitos básicos
   2. MPM prefork
   3. MPM worker
   4. MPM event
Outros artigos deste autor

Configuração do serviço NTP em servidor cliente

Jogos via Internet em 2 minutos com Hamachi

Como utilizar o Kurumin dentro de uma única partição Windows

Oracle 9i, Apache e PHP

Migrando para Linux sem medo (parte 2)

Leitura recomendada

Atualizando sua versão Slackware - upgrade de pacotes

Cluster Beowulf

Blackbox total - Instalado, configurado e personalizado

Criando servidor de arquivos GNU/Linux com RAID virtual e DFS em rede Windows

Como desabilitar RAID 1

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts