Apache es el servidor web por excelencia. Es uno de los más conocidos y sin dudarlo el más usado a nivel de software libre. Este servidor tiene dos formas completamente diferentes de trabajar y de gestionar las conexiones y los hilos. Una es Prefork y otra es Worker. Por defecto, la instalación de Apache, especialmente si lo empleas con módulos php usa la primera, por que la considera más eficiente, pero depende de para qué y de la cantidad de visitas que vayas a tener, emplear uno u otra puede mejorar mucho el rendimiento de tu sistema.
A continuación vamos a mostrar las diferencias entre una y otra, para que así quede más claro y la decisión de usar una u otra sea más fácil de tomar.
MPM Prefork | MPM Worker |
Activado por defecto en Apache.
|
No está habilitado por defecto y para activarlo es necesario alterar la configuración de Apache.
|
El manejo de las peticiones es muy similar a cómo lo hacía la versión 1.3.
| |
Mucho más fácil de usar con instalaciones de php, lo que lo hace más estable y seguro.
|
El manejo de páginas en php se le hace más complicado.
|
Maneja cada petición que se realiza de forma completamente independiente. Un proceso de Apache para cada cliente.
Al finalizar con un cliente el thread atiende a otro (MaxRequestsPerChild). |
Presenta un modo de funcionamiento multiproceso-multihilo.
Un proceso puede desplegar varios hilos lo que facilita la respuesta a un gran número de clientes.
|
Tiene un número máximo de clientes a atender simultáneamente (max_clients).
|
No tiene un límite pre-establecido de clientes.
|
Necesita más recursos de CPU y memoria.
|
Necesita muchos menos recursos de CPU y de memoria, lo que ofrece una mejor escalabilidad.
|
Algunos módulos, especialmente de php, pueden no funcionar correctamente. Si se habilita hay que comprobar el correcto funcionamiento de éstos.
| |
Es ideal para emplear con páginas dinámicas y pocas conexiones concurrentes.
|
Se usa para una elevada concurrencia de usuarios sobre páginas más o menos estáticas.
|
El empleo de uno u otro no es simplemente un cambio en la configuración, sino que el servidor Apache debe venir con uno u otro compilado (o emplear un módulo diferente para cada uno). Si te interesa saber qué MPM emplear tu Apache,
shell> apachectl -V Server version: Apache/2.2.16 (Debian) Server built: Sep 13 2012 02:54:14 Server's Module Magic Number: 20051115:24 Server loaded: APR 1.4.2, APR-Util 1.3.9 Compiled using: APR 1.4.2, APR-Util 1.3.9 Architecture: 64-bit Server MPM: Prefork threaded: no forked: yes (variable process count) ... shell> apache2 -l Compiled in modules: core.c mod_log_config.c mod_logio.c prefork.c http_core.c mod_so.c
La configuración por defecto de Apache para ambos módulos es la siguiente (en debian).
<ifmodule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </ifmodule> <ifmodule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </ifmodule>donde,
- StartServersNúmero de procesos que arrancan al iniciar el servicio.
- MinSpareServersNúmero de procesos iniciales en iddle que esperan una petición.
- MaxSpareServersNúmero máximo de procesos en iddle esperando una petición.
- MaxRequestsPerChildNúmero máximo de respuestas por hijo.Cuando un hijo excede este valor es automáticamente destruido y si es necesario un nuevo proceso ocupa su lugar. Esto favorece el reciclaje de memoria, ya que al destruir el hijo también de limpian los archivos dinámicos que se han generado. Por lo tanto, favorece el uso y mantenimiento de la RAM.
Algo también importante a la hora de optimizar nuestro servidor Apache son las conexiones persistentes y el comportamiento de las mismas. Esto se configura en las siguientes variables,
- KeepAliveActiva o desactiva las conexiones persistentes. Si las permitimos una misma conexión TCP puede realizar múltiples peticiones sin cerrar dicha conexión.
- MaxKeepAliveRequestsRepresenta el número máximo de peticiones permitidas en una misma conexión.
- KeepAliveTimeOutRepresenta el tiempo máximo (en segundos) que una conexión permanecerá a la espera de nuevas peticiones. Si no se cerrará.
La entrada Apache, Prefork vs. Worker la puedes leer en Puppet Linux.
No hay comentarios :
Publicar un comentario