Versión 2.0 del Servidor HTTP Apache

| 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 | 
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.
 AcceptMutex
 AcceptMutex CoreDumpDirectory
 CoreDumpDirectory EnableExceptionHook
 EnableExceptionHook Group
 Group Listen
 Listen ListenBacklog
 ListenBacklog LockFile
 LockFile MaxClients
 MaxClients MaxMemFree
 MaxMemFree MaxRequestsPerChild
 MaxRequestsPerChild MaxSpareThreads
 MaxSpareThreads MinSpareThreads
 MinSpareThreads PidFile
 PidFile ScoreBoardFile
 ScoreBoardFile SendBufferSize
 SendBufferSize ServerLimit
 ServerLimit StartServers
 StartServers ThreadLimit
 ThreadLimit ThreadsPerChild
 ThreadsPerChild User
 UserUn
    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:
      MaxRequestsPerChild a cero MaxSpareThreads al mismo valor
      que la directiva MaxClientsUna 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.