Multiprocesos de apache (Prefork – Worker)

Apache Hace unos meses en un proyecto en el que trabajé empezamos a tener problemas de rendimiento de apache, claro, es una aplicación “grande”, maneja un número considerable de usuarios concurrentes (2000 visitas concurrentes). Este proyecto es una aplicación LAMP (Linux, Apache, MySql y PHP), inicialmente todo corría perfectamente, el desempeño de los servidores era ideal, pero la aplicación empezó  crecer, por ende el número de usuarios también, con esto llegan más peticiones, más procesos de la aplicación, más conexiones abiertas a base de datos y por supuesto más procesos de apache; es aquí donde entra el tema de los multiprocesos de apache, prefork o worker. ¿Qué es esto? Veamos:

Apache puede ser configurado para que maneje de una u otra forma los procesos que abren las peticiones realizadas por los usuarios conectados al servidor, Los modos prefork y worker de apache se incorporaron en la versión 2.0 de apache y estos permiten configurar apache dependiendo de los requerimientos específicos de cada servidor Web.

Características del MPM Prefork

  • MPM activado por default en todas las instalaciones de apache.
  • Maneja las peticiones de manera similar a como lo hacía apache 1.3.
  • Mucho mas amigable con el uso intensivo de PHP. Compatible con librerías de seguridad de PHP (thread-safe), esto lo hace mucho más estable.
  • Especialmente adecuado cuando se quiere manejar de manera independiente cada petición realizada a apache, es decir, un proceso de apache para cada cliente, una vez termina de atender a un cliente puede atender a otro (MaxRequestsPerChild).
  • Este MPM tiene menos capacidad de atender muchos clientes a la vez (max_clients).
  • Al manejar un proceso por cada cliente este MPM consume muchos más recursos (memoria RAM y CPU).

Características del MPM Worker

  • Para activar este MPM se debe modificar la configuración por default de apache.
  • Presenta dificultades cuando se tienen módulos no thread-safe, especialmente con los aceleradores de PHP.
  • Este MPM maneja un servidor hibrido multiproceso – multihilo, esto quiere decir que un solo proceso puede manejar múltiples hilos (ThreadsPerChild), lo cual garantiza una gran capacidad de manejar muchos clientes con menos recursos.
  • Ideal para manejo de contenido estático.
  • Al manejar procesos hijos por cada proceso padre este MPM consume muchos menos recursos (memoria RAM y CPU) ofreciendo mejor crecimiento del servicio.

Una vez mencionadas las principales características de estos dos MPM de apache la pregunta principal es ¿Cuál de los dos MPM es mejor?

En mi opinión, la respuesta depende de que tipo de servicios corre en tu servidor apache, Si es un servidor que no maneja una concurrencia elevada de usuarios y se desea ofrecer un servicio sin tantas complicaciones es mejor trabajar con el MPM que viene habitado por defecto en apache, pero si es un servidor con un número elevado de visitas, con un gena numero de conexiones concurrentes lo mejor es trabajar configurar el MPM worker ya que este tiene algunas ventajas en cuanto a consumo de recursos.

Si la decisión es activar el MPM Worker se debe tener claro que esta activación implica algunos cambios importantes en la instalación de apache.

  1. La activación de el implica hacer algunos cambios en el servidor y en apache que requieren un buen conocimiento de Linux.
  2. Se debe validar que funcione con todos los módulos instalados y activados en apache
  3. Para obtener una verdadera mejoría en el desempeño de apache se debe considerar la necesidad de instalar algún sistema para el manejo de cache

Espero les sea útil este post. En una próxima publicación les compartiré una guía para configurar apache con el MPM Worker.

Leave a Reply

Your email address will not be published. Required fields are marked *

Blog

Next article

Historia de los computadores