Combien de temps les processus Apache restent-ils en vie?

9

Quand apache bifurque un processus pour mod-php, combien de temps reste-t-il vivant? Le processus se termine-t-il dès que la réponse est envoyée, ou restera-t-il actif jusqu'à ce que le navigateur reçoive la réponse complète?

Jamie Clinton
la source

Réponses:

9

Si vous utilisez mod-php, vous utilisez probablement le preforkMPM, qui génère des processus enfants pour gérer les demandes. Le nombre et la durée de vie de ces enfants régis par les directives de votre fichier principal apache2.conf(ou httpd.conf, selon votre distribution).

Recherchez la pièce qui ressemble à ceci (vos valeurs peuvent varier):

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

Apache génère StartServersautomatiquement les enfants. Ces processus resteront inactifs jusqu'à ce qu'une demande arrive. Si les enfants deviennent occupés, cela engendrera des MaxClientsenfants pour gérer la charge, essayant de maintenir MinSpareServersles enfants inactifs pour récupérer de nouvelles demandes. Une fois que les choses se seront calmées, les enfants inactifs seront tués jusqu'à ce que le nombre soit tombé MaxSpareServers.

Le bit dont vous parlez est géré par MaxRequestsPerChild. Fixé à 0, cela signifie que les enfants peuvent vivre éternellement, ce qui est la valeur par défaut dans la plupart des installations Apache. Défini sur autre chose, cela signifie que chaque processus enfant sera tué et redémarré de force, quelle que soit la charge actuelle, une fois qu'il aura traité ce nombre de demandes.

Plus de détails sur le MPM prefork ici: http://httpd.apache.org/docs/2.2/mod/prefork.html

SmallClanger
la source
Merci, cela me donne une meilleure compréhension d'Apache. Ma question spécifique est: lorsque la réponse est renvoyée au client, que fait le processus enfant? Reste-t-il inactif à attendre que le client accuse réception ou peut-il traiter immédiatement une nouvelle demande?
Jamie Clinton
Une fois qu'une réponse est envoyée et que le client l'accepte, la connexion TCP reste ouverte pendant 15 secondes supplémentaires (je pense), par défaut. Pendant ce temps, l'enfant sera le premier à recevoir toute autre requête HTTP du même client. Si aucun n'est reçu, la connexion TCP est fermée et l'enfant est traité conformément aux règles ci-dessus. En règle générale, il reste en vie et retourne dans le pool inactif. Ce comportement peut être modifié par le client et le serveur. (Il peut, par exemple, être préférable de fermer la connexion immédiatement)
SmallClanger
De plus, si vous ne l'avez pas déjà utilisé, cableshark.org est un excellent outil pour analyser le trafic entre le client et le serveur. Cela vous donnera un aperçu énorme de ce qui se passe sous le capot.
SmallClanger
4

httpd ne crée pas de processus pour mod_php. Il bifurque un processus pour lui-même, qui contient mod_php. L'enfant restera en vie jusqu'à ce qu'il ait satisfait aux MaxRequestsPerChilddemandes. mod_php lui-même continuera à gérer chaque demande de script PHP jusqu'à ce que le script se termine ou que la limite de temps soit dépassée.

Ignacio Vazquez-Abrams
la source