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.
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:
MaxRequestsPerChild
a cero 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.