Ejercicio: Gestión de peticiones

Módulos de Multiprocesamiento (MPMs) en Apache 2.4

Por defecto apache2 se configura con el MPM event, podemos ver el MPM que estamos utilizando con la siguiente instrucción::

# apachectl -V
...
Server MPM:     event
...

Para cambiar de MPM tenemos que desactivar el actual y activar el nuevo módulo::

# a2dismod mpm_event
# a2enmod mpm_prefork
# service apache2 restart

# apachectl -V
...
Server MPM:     prefork
...

Las directivas de configuración de los distintos MPM

En /etc/apache2/mods-availables/mpm_prefork.conf::

Directivas de control de prefork:

StartServers              5
MinSpareServers           5
MaxSpareServers          10
MaxRequestWorkers       150
MaxConnectionsPerChild    0

En /etc/apache2/mods-availables/mpm_worker.conf:

Directivas de control de worker:

StartServers            2
MinSpareThreads         25
MaxSpareThreads         75
ThreadLimit             64
ThreadsPerChild         25
MaxRequestWorkers       150
MaxConnectionsPerChild  0

En /etc/apache2/mods-availables/mpm_event.conf:

Directivas de control de event:

StartServers              2
MinSpareThreads          25
MaxSpareThreads          75
ThreadLimit              64
ThreadsPerChild          25
MaxRequestWorkers       150
MaxConnectionsPerChild    0

Gestión de peticiones en nginx

Procesos worker

La directiva worker_processes nos indica el número de procesos que van a responder peticiones. El valor de worker_processes, se suele definir al mismo número de CPUs que tenga el equipo, o como mucho, el doble. Esto se hace así porque, al ser un servidor web asíncrono, cada proceso se puede encargar de muchas peticiones y por lo tanto no tiene sentido tener más procesos que CPUs capaces de ejecutar código.

Para indicar un worker por cada core de la CPU:

worker_processes auto;
  • Comprueba la configuración por defecto de nginx y comprueba cuantos procesos worker se están ejecutando.

Conexiones por proceso

La opción worker_connections establece el número máximo de conexiones que cada proceso worker puede procesar a la vez. Es recomendable aumentar este valor si nuestra web tiene un elevado tráfico. El valor por defecto es de 768.

El número máximo de clientes que Nginx puede manejar viene determinado por multiplicar el valor indicado en worker_processes por el indicado en worker_connections.

Además podemos usar multi_accept con el fin de que un worker acepte todas las nuevas conexiones al mismo tiempo.

  • Comprueba la configuración por defecto de nginx.