Por quanto tempo os processos Apache permanecem vivos?

9

Quando o apache bifurca um processo para o mod-php, por quanto tempo ele permanece vivo? O processo morre assim que a resposta é enviada ou permanece ativo até que o navegador receba a resposta completa?

Jamie Clinton
fonte

Respostas:

9

Se você estiver usando o mod-php, provavelmente preforkusará o MPM, que gera processos filhos para lidar com solicitações. O número e a vida útil dessas crianças, conforme regido pelas diretivas em seu arquivo principal apache2.conf(ou httpd.conf, dependendo da sua distribuição).

Procure a parte que se parece com isso (seus valores podem variar):

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

O Apache gera StartServerscrianças automaticamente. Esses processos ficarão inativos até que uma solicitação seja recebida. Se as crianças ficarem ocupadas, elas aparecerão MaxClientspara lidar com a carga, tentando manter MinSpareServersas crianças inativas para receber novas solicitações. Quando as coisas se acalmarem, as crianças ociosas serão mortas até que a contagem diminua MaxSpareServers.

O que você está perguntando é tratado MaxRequestsPerChild. Definido como 0, isso significa que os filhos podem viver para sempre, que é o valor padrão na maioria das instalações do apache. Definido como qualquer outra coisa, significa que cada processo filho será forçado a ser morto e reiniciado, independentemente da carga atual, uma vez que ele tenha tratado esse número de solicitações.

Mais detalhes sobre o MPM prefork aqui: http://httpd.apache.org/docs/2.2/mod/prefork.html

SmallClanger
fonte
Obrigado, isso me dá uma melhor compreensão do Apache. Minha pergunta específica é: quando a resposta é enviada de volta ao cliente, o que o processo filho faz? Ele fica ocioso aguardando o reconhecimento do cliente ou pode lidar imediatamente com uma nova solicitação?
Jamie Clinton
Depois que uma resposta é enviada e o cliente a reconhece, a conexão TCP permanece aberta por mais 15 (eu acho) 15 segundos, por padrão. Durante esse período, o filho será o primeiro a receber outras solicitações HTTP do mesmo cliente. Se nenhum for recebido, a conexão TCP será fechada e o filho será tratado de acordo com as regras acima. Normalmente, ele permanece vivo e volta para a piscina ociosa. Esse comportamento pode ser modificado pelo cliente e pelo servidor. (Ela pode, por exemplo, ser preferível para fechar a ligação imediatamente)
SmallClanger
Além disso, se você ainda não o usou, o wireshark.org é uma ótima ferramenta para analisar o tráfego entre cliente e servidor. Isso lhe dará uma grande visão do que está acontecendo sob o capô.
SmallClanger
4

O httpd não bifurca um processo para o mod_php. Ele bifurca um processo para si mesmo, com o mod_php incorporado. A criança permanecerá viva até que tenha cumprido os MaxRequestsPerChildpedidos. O próprio mod_php continuará manipulando cada solicitação de um script PHP até que o script saia ou o limite de tempo seja excedido.

Ignacio Vazquez-Abrams
fonte