Per quanto tempo i processi Apache rimangono in vita?


9

Quando apache avvia un processo per mod-php, per quanto tempo rimane in vita? Il processo termina non appena viene inviata la risposta o rimarrà in vita fino a quando il browser non riceverà la risposta completa?

Risposte:


9

Se stai usando mod-php, probabilmente stai usando preforkMPM, che genera processi figlio per gestire le richieste. Il numero e la durata di questi bambini come regolati dalle direttive nel file principale apache2.conf(o httpd.conf, a seconda della distribuzione).

Cerca la parte che appare così (i tuoi valori possono variare):

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

Apache genera StartServersautomaticamente i bambini. Questi processi resteranno inattivi fino a quando non arriva una richiesta. Se i bambini diventano occupati, si genererà ai MaxClientsbambini per gestire il carico, cercando di mantenere i MinSpareServersbambini inattivi per raccogliere nuove richieste. Una volta che le cose si calmano, i bambini inattivi verranno uccisi fino a quando il conteggio non sarà ridotto a MaxSpareServers.

La parte di cui stai chiedendo è gestita da MaxRequestsPerChild. Impostato su 0, questo significa che i bambini possono vivere per sempre, che è il valore predefinito nella maggior parte delle installazioni di Apache. Impostato su qualsiasi altra cosa, significa che ogni processo figlio verrà forzatamente interrotto e riavviato, indipendentemente dal carico corrente, una volta che avrà gestito quel numero di richieste.

Maggiori dettagli sul prefork MPM qui: http://httpd.apache.org/docs/2.2/mod/prefork.html


Grazie, questo mi dà una migliore comprensione di Apache. La mia domanda specifica è: quando la risposta viene inviata al client, che cosa fa il processo figlio? Resta inattivo in attesa del client di riconoscere o può gestire immediatamente una nuova richiesta?
— Jamie Clinton,

Una volta che una risposta viene inviata e il client la riconosce, la connessione TCP rimane aperta per altri (credo) 15 secondi, per impostazione predefinita. Durante quel periodo il bambino sarà il primo a ricevere ulteriori richieste HTTP dallo stesso client. Se non ne viene ricevuto nessuno, la connessione TCP viene chiusa e il figlio viene gestito in base alle regole precedenti. In genere rimane vivo e ritorna nella piscina inattiva. Questo comportamento può essere modificato sia dal client che dal server. (Ad esempio, potrebbe essere preferibile chiudere immediatamente la connessione)
— SmallClanger

Inoltre, se non l'hai già usato, WireShark.org è un ottimo strumento per analizzare il traffico tra client e server. Ti darà una visione approfondita di ciò che sta accadendo sotto il cofano.
— SmallClanger,

4

httpd non esegue il fork di un processo per mod_php. Fornisce un processo per sé, che ha mod_php incorporato in esso. Il bambino rimarrà in vita fino a quando non avrà soddisfatto le MaxRequestsPerChildrichieste. mod_php stesso continuerà a gestire ogni richiesta di uno script PHP fino a quando lo script non viene chiuso o non viene superato il limite di tempo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.