Processos HTTPD gerados

1

Alguém pode confirmar como o Apache gera novos filhos?

Como se eu conectasse a um servidor web (HTTP 1.0 / no keep alive) e emitisse um HTTP / GET, eu geraria um novo filho HTTPD. Se então emitir outro HTTP / GET, uma nova conexão TCP será construída. No entanto, vou usar o mesmo processo filho de eu gerar um novo?

Além disso, se eu estivesse usando HTTP 1.1 (com keep-alive) e reutilizei a mesma conexão TCP, o processo / desova do httpd seria diferente se eu não estivesse usando keep-alive?

Obrigado,

    
por rick3d 23.11.2012 / 10:10

2 respostas

2

if I connect to a webserver (HTTP 1.0 / no keep alive) and issue a HTTP /GET I will be spawned a new HTTPD child

Não, para que o handshake TCP seja concluído, você já tem um processo para lidar com sua solicitação. Já que você menciona 'processos' isso significa que você está falando sobre o MPM pré-fork. Nesse caso, o servidor já deve ter um pool de processos filho disponíveis - um deles adquire um mutex para atender a próxima conexão de entrada.

O servidor baseado em threads funciona de maneira semelhante.

O servidor baseado em eventos é uma chaleira de peixe completamente diferente e não gera threads / processos.

If then issue another HTTP /GET...will I use the same child process

Não. E mesmo que você saiba que tem uma conexão keepalive, não há nenhum estado retido pelo servidor - por isso você deve tratá-lo como se fosse um novo processo.

    
por 23.11.2012 / 13:08
1

Não há configuração universal, pois esse é o aspecto mais crucial do desempenho do servidor http. Geralmente, o Apache se esforça para evitar o bifurcação (ou desova, como você o chamou). Confira isso:

link

Multi-Processing Modules (MPMs) are Apache modules that manage the network connections and dispatching the requests. There are two common MPMs available for Apache2, namely, mpm_prefork_module and mpm_worker_module. The mpm_prefork_module uses the traditional model of one process per request, while the mpm_worker_module uses the threaded model which uses multiple processes, each with multiple threads to get better performance with lower overhead.

Manuais para o Apache 2.4 dizem:

When building Apache, you must choose an MPM to use. There are platform-specific MPMs for some platforms: mpm_netware, mpmt_os2, and mpm_winnt [for any MS Windows version]. For general Unix-type systems, there are several MPMs from which to choose. The choice of MPM can affect the speed and scalability of the httpd:

  • The worker MPM uses multiple child processes with many threads each. Each thread handles one connection at a time. Worker generally is a good choice for high-traffic servers because it has a smaller memory footprint than the prefork MPM.
  • The event MPM is threaded like the Worker MPM, but is designed to allow more requests to be served simultaneously by passing off some processing work to supporting threads, freeing up the main threads to work on new requests.
  • The prefork MPM uses multiple child processes with one thread each. Each process handles one connection at a time.
    
por 23.11.2012 / 11:39