worker - Servidor HTTP Apache

Versión 2.0 del Servidor HTTP Apache

Apache > Servidor HTTP > Documentación > Versión 2.0 > Módulos

# MPM de Apache worker

Idiomas disponibles: de | en | es | ja

Descripción: | Módulo de MultiProcesamiento que implementa un servidor web híbrido multihebra-multiproceso
Estado: | MPM
Identificador de Módulos: | mpm_worker_module
Fichero de Código Fuente: | worker.c

### Resumen de contenidos

Este Módulo de MultiProcesamiento (MPM) implementa un servidor híbrido multiproceso-multihebra. Usando hebras para atender peticiones, el servidor puede servir un mayor número de peticiones con menos recursos de sistema que un servidor basado únicamente en procesos. No obtante, se mantiene casi por completo la estabilidad de un servidor basado en procesos manteniendo la capacidad multiproceso, pudiendo cada proceso tener muchas hebras.

Las directivas más importantes que se usan para controlar este MPM son `ThreadsPerChild`, que controla el número de hebras que tiene cada proceso hijo y `MaxClients`, que controla el número máximo de hebras que pueden crearse.

### Directivas

### Temas

- Cómo funciona

### Consulte también

- Especificar las direcciones y los puertos que usa Apache

## Cómo funciona

Un solo proceso de control (el padre) es el responsable de crear los procesos hijo. Cada proceso hijo crea un número fijo de hebras del servidor de la forma que se especifica en la directiva `ThreadsPerChild`, así como una hebra de escucha que escuchará si se producen peticiones y las pasará a una hebra del servidor para que la procese.

Apache siempre intenta mantener en reserva cierto número de hebras de sobra o en espera, que están preparadas para servir peticiones en el momento en que lleguen. Así, los clientes no tienen que esperar a que se creen nuevas hebras o procesos para que sean atendidas sus peticiones. El número de procesos que se crean al principio está determinado por la directiva `StartServers`. Después durante el funcionamiento del servidor, Apache calcula el número total de hebras en espera entre todos los procesos, y crea o elimina procesos para mantener ese número dentro de los límites especificados en las directivas `MinSpareThreads` y `MaxSpareThreads`. Como este proceso está bastante autorregulado, no es muy habitual que sea necesario modificar los valores que estas directivas traen por defecto. El número máximo de clientes que pueden ser servidos simultáneamente (por ejemplo, el número máximo de hebras entre todos los procesos) está determinado por la directiva `MaxClients`. El número máximo de procesos hijo activos está determinado por el valor especificado en la directiva `MaxClients` dividido por el valor especificado en la directiva `ThreadsPerChild`.

Hay dos directivas que establecen límites estrictos al número de procesos hijo activos y al número de hebras del servidor en un proceso hijo, y puede cambiarse solo parando completamente el servidor y volviendo a iniciarlo. La directiva `ServerLimit` marca el límite estricto de procesos hijo activos posibles, y debe ser mayor o igual al valor de la directiva `MaxClients` dividido por el valor de la directiva `ThreadsPerChild`. El valor de la directiva `ThreadLimit` es el límite estricto del número de hebras del servidor, y debe ser mayor o igual al valor de la directiva `ThreadsPerChild`. Si los valores de esas directivas no son los que vienen por defecto, deben aparecer antes que el resto de directivas del módulo `worker`.

Además del conjunto de procesos hijo activos, puede haber otros procesos hijo que están terminando pero en los que al menos una hebra del servidor está todavía tratando una conexión con un cliente. Puede haber hasta `MaxClients` procesos terminando, aunque el número real de estos procesos que puede esperarse es mucho menor. Este comportamiento puede evitarse desactivando la eliminación individual de procesos hijo, lo que se hace de la siguiente manera:

- fijar el valor de la directiva `MaxRequestsPerChild` a cero
- fijar el valor de la directiva `MaxSpareThreads` al mismo valor que la directiva `MaxClients`

Una configuración típica del sistema de control de procesos y hebras del módulo de MPM `worker` prodría ser como sigue:

`ServerLimit 16
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25`

Mientras que el proceso padre se inicia con privilegios de usuario `root` en Unix para usar el puerto de escucha 80, los procesos hijo y las hebras se inician con menores privilegios de usuario. Las directivas `User` y `Group` se usan para determinar los privilegios con los que se iniciarán los procesos hijo. Los procesos hijo deben ser capaces de leer los contenidos que van a servir, pero solo los permisos extrictamente necesarios para cumplir su tarea. Además. a menos que se use suexec, los privilegios fijados en estas directivas son los que que van a heredar los scripts CGI.

La directiva `MaxRequestsPerChild` controla con qué frecuencia el servidor recicla los procesos eliminando los antiguos y creando nuevos.

Idiomas disponibles: de | en | es | ja