La configuración de los principales MPM de Apache (prefork, worker/event y winnt) suele derivar con frecuencia en cálculos que tienen en cuenta una múltiple cantidad de factores y que acaba resultando en la elección de unos valores de configuración más o menos acertados para nuestro entorno.
En nuestro servidor Apache podemos ver qué MPM está instalado con apachectl -V
si estás en Debian o con httpd -V
en Red Hat o distros derivada:
El MPM utilizado puede haberse instalado bien al compilar el servidor desde código fuente, o con una herramienta de paquetería de la distro en cuestión.
No vamos a entrar en el artículo en detalles sobre qué son los elementos a configurar en cada unos de ellos (MaxClients, StartServers, etc…) ya que para ello ya existe documentación oficial y pública del proyecto Apache que se puede consultar. Lo que sí es interesante es echarle un vistazo a cómo optimizar y configurarlo para nuestra plataforma.
A la hora de determinar la parametrización de nuestro MPM, hay dos recursos principales a tener en cuenta:
- Nº de CPUs. Por ejemplo si en el parámetro MaxRequestsPerChild indicamos un valor bajo como 100, un proceso hijo de Apache recibiría 100 peticiones y después sería eliminado para generar un nuevo proceso hijo para recibir nuevas peticiones. Cada creación/forkeo de un proceso hijo es una tarea que recae sobre la CPU.
- RAM disponible. Afecta por ejemplo al nº de procesos hijo que un servidor Apache puede mantener de forma simultánea.
Si bien estos dos recursos son esenciales y hay que tenerlos en cuenta desde un primer momento para parametrizar correctamente nuestro servidor web, existen no obstante una gran cantidad de factores adicionales a tener en cuenta como puede ser:
- ¿Tenemos activada compresión de contenido? Esto optimiza el uso de ancho de banda pero recae sobre la CPU realizar la compresión/decompresión correspondiente.
- ¿El servidor web y de aplicaciones se encuentran en la misma máquina?
- ¿Las requests enviadas al backend Jboss se deben mantener activas durante un largo tiempo?
- El nº de requests también influye en los valores especificados a nuestro MPM.
Y así una larga lista de condicionantes que deberíamos tener en cuenta para configurar el MPM correspondiente. Por suerte contamos con la herramienta Load Balancer Configuration Tool de Red Hat que nos facilita la vida para hacer los cálculos. Necesitaremos haber creado una cuenta previamente, no es necesaria ninguna suscripción.
Una vez en la aplicación web, tendremos que especificar datos del frontend:
También datos del backend:
Y finalmente una serie de opciones que también influirían en la parametrización:
Obtendremos entonces una serie de resultados con la configuración recomendada tanto para el frontend, backend y consejos adicionales:
Como vemos, una herramienta bastante interesante que automatiza la configuración óptima de nuestro MPM teniendo en cuenta los múltiples factores que influyen en la disponibilidad y rendimiento de nuestro entorno.