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.