Concurrencia máxima de un servidor Apache2 GNU/Linux

Visitas: 774  
Tiempo total: 19 días con 4:5:44 hrs  

La concurrencia máxima de un servidor depende de los recursos de hardware y la capacidad de conexión a la red. El primer punto que es necesario establecer es la cantidad de memoria RAM que utiliza la conexión de un usuario con Apache, esto se calcula con el comando (resultado en mb):

ps -ylC apache2 –sort:rss | awk ‘{SUM += $8; I += 1} END {print SUM/I/1024}’

El siguiente paso es calcular la cantidad de memoria que utilizan los demás servicios que hacen funcionar el sistema operativo, esto lo calculamos con (resultado en mb):

ps -N -ylC apache2 –sort:rss | awk ‘{SUM += $8} END {print SUM/1024}’

A continuación, y en base a la memoria RAM calculamos la cantidad máxima de conexiones concurrentes por usuario:

Concurrencia RAM = (RAM total – RAM utilizada por el sistema) / RAM por usuario Apache

Con este resultado es necesario recordar que un solo usuario puede estar consumiendo más de una solicitud a este servicio (por ejemplo, estar utilizando tres pestañas del navegador web al mismo tiempo).

Configuración de servidor Apache

A continuación, debemos modificar la configuración de Apache para aceptar una mayor concurrencia a la configurada por defecto. Para esto modificamos el archivo /etc/apache/apache2.conf y modificamos el siguiente parámetro:

MaxKeepAliveRequests 100

100 es la cantidad por defecto y en base al calculo anterior lo modificamos. Es necesario recordar que el mismo servidor Linux necesita memoria RAM para funcionar y cada usuario Apache estará haciendo uso de otros servicios como MySQL u otra base de datos. Por esta razón no utilizamos el resultado máximo, utilizar un 33% será suficiente.

Módulos multiprocesos de Apache2

Existen diferentes módulos para utilizar multiprocesos en apache, estos son:

  • Prefork (mpm-prefork): Es el utilizado por defecto y crea procesos independientes por cada solicitud (forking).
  • Worker (mpm-worker): Crea procesos que a su vez utilizan varios hilos (forking y threading), esto permite que cada proceso pueda atender diferentes solicitudes.
  • Event (mpm-event): Optimización de mpm-worker que solucionar un problema de implementación keep-alive.
  • ITK (mpm-itk): implementación de mpm-prefork que utiliza un proceso por cada solicitud, pero permite asignar un usuario del sistema por cada servidor virtual.

El siguiente comando se utiliza para ver que modulo estamos utilizando:

apachectl -V | grep MPM

El módulo que debemos de utilizar para maximizar el uso de recursos del servidor es mpm-event, a continuación, deshabilitamos el modulo por defecto prefork, instalamos mpm-event y lo activamos:

a2dismod mpm_prefork
apt-getinstall apache2-mpm-event
a2enmod mpm_event

A continuación, modificamos el archivo /etc/apache2/mods-available/mpm_event.conf:

MaxRequestWorkers 150
MaxConnectionsPerChild 0

MaxRequestWorkers 150 es la cantidad máxima por defecto de procesos a crear, esto lo cambiamos al calculo que establecimos anteriormente (33%). El parámetro MaxConnectioniPerChild 0 significa que cada proceso podrá crear una cantidad infinita de hilos en su tiempo de vida.

Referencias

[https://blog.desdelinux.net/como-aumentar-conexiones-simultaneas-apache/]
[http://arbo.com.ve/como-optimizar-la-concurrencia-de-ejecucion-de-apache-para-wordpress/]
[https://www.vozidea.com/diferencias-entre-apache-prefork-event-worker]
[https://oxpedia.org/wiki/index.php?title=Tune_apache2_for_more_concurrent_connections]
[https://documentation.cpanel.net/display/EA4/Apache+Module%3A+MPM+ITK]


Para recibir boletines de información, por favor escribe tu correo electrónico:

Por favor ingrese un correo electrónico valido.
Registrado correctamente!