¿Cuánto tiempo permanecen vivos los procesos de Apache?

9

Cuando apache bifurca un proceso para mod-php, ¿cuánto tiempo permanece vivo? ¿El proceso muere tan pronto como se envía la respuesta, o se mantendrá vivo hasta que el navegador reciba la respuesta completa?

Jamie Clinton
fuente

Respuestas:

9

Si está utilizando mod-php, es probable que esté utilizando el preforkMPM, que genera procesos secundarios para manejar solicitudes. El número y la vida útil de estos niños según las directivas en su archivo principal apache2.conf(o httpd.conf, según su distribución).

Busque la parte que se ve así (sus valores pueden variar):

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

Apache genera StartServersniños automáticamente. Estos procesos permanecerán inactivos hasta que llegue una solicitud. Si los niños se vuelven ocupados, se generará para que los MaxClientsniños manejen la carga, tratando de mantener a los MinSpareServersniños inactivos para recoger nuevas solicitudes. Una vez que las cosas se calmen, los niños inactivos serán asesinados hasta que se reduzca el conteo MaxSpareServers.

El bit por el que estás preguntando es manejado por MaxRequestsPerChild. Establecido en 0, esto significa que los niños pueden vivir para siempre, que es el valor predeterminado en la mayoría de las instalaciones de Apache. Establecido en cualquier otra cosa, significa que cada proceso secundario se eliminará y reiniciará por la fuerza, independientemente de la carga actual, una vez que haya manejado esa cantidad de solicitudes.

Más detalles sobre el MPM prefork aquí: http://httpd.apache.org/docs/2.2/mod/prefork.html

SmallClanger
fuente
Gracias, eso me da una mejor comprensión de Apache. Mi pregunta específica es: cuando la respuesta se envía al cliente, ¿qué hace el proceso secundario? ¿Se queda inactivo esperando que el cliente reconozca o puede manejar de inmediato una nueva solicitud?
Jamie Clinton
Una vez que se envía una respuesta y el cliente la reconoce, la conexión TCP permanece abierta durante otros 15 segundos (creo) de forma predeterminada. Durante ese tiempo, el niño será el primero en recibir más solicitudes HTTP del mismo cliente. Si no se recibe ninguno, la conexión TCP se cierra y el niño se trata de acuerdo con las reglas anteriores. Por lo general, se mantiene vivo y vuelve al grupo inactivo. Este comportamiento puede ser modificado tanto por el cliente como por el servidor. (Por ejemplo, puede ser preferible cerrar la conexión de inmediato)
SmallClanger
Además, si aún no lo ha utilizado, wireshark.org es una gran herramienta para analizar el tráfico entre el cliente y el servidor. Le dará una gran idea de lo que está sucediendo debajo del capó.
SmallClanger 01 de
4

httpd no bifurca un proceso para mod_php. Bifurca un proceso por sí mismo, que tiene mod_php incrustado en él. El niño permanecerá vivo hasta que haya cumplido las MaxRequestsPerChildsolicitudes. mod_php seguirá manejando cada solicitud de un script PHP hasta que el script salga o se exceda el límite de tiempo.

Ignacio Vazquez-Abrams
fuente