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?
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:
Se stai usando mod-php, probabilmente stai usando prefork
MPM, 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 StartServers
automaticamente i bambini. Questi processi resteranno inattivi fino a quando non arriva una richiesta. Se i bambini diventano occupati, si genererà ai MaxClients
bambini per gestire il carico, cercando di mantenere i MinSpareServers
bambini 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
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 MaxRequestsPerChild
richieste. 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.