Configurar en Apache el modo Prefork o Worker

Dependiendo el tipo de aplicación, intensidad de uso de los servidores WEB Apache y capacidad hardware de tu sistema operativo, tendrás que configurar Apache en modo Prefork o Worker.

En mi caso, al ser WordPress una aplicación PHP, es más óptimo trabajar en modo Prefork.

Las versiones con las que estoy trabajando en el momento en el que escrito este artículo son Linux CentOS 7.5.1804 y Apache 2.4.6.

En el fichero siguiente fichero, he elegido arrancar Apache en modo Prefork, tal y como se puede observar:

[root@prt53ws1 conf]# cat /etc/httpd/conf.modules.d/00-mpm.conf
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so

[root@prt53ws1 conf]#

Y en el fichero de configuración de Apache he añadido las siguientes directivas:

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers 16
MinSpareServers 10
MaxSpareServers 50
ServerLimit 1024
MaxClients 1024
MaxRequestsPerChild 4000
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

Como podemos observar, el sistema ha arrancado 18 procesos de Apache (algo más del mínimo configurado):

[root@prt53ws1 ~]# ps -ef |grep -i httpd |wc -l
18
[root@prt53ws1 ~]#

Una vez que tenemos claro el modo en que vamos a arrancar Apache, de acuerdo con los requerimientos de nuestra aplicación, lo que tenemos que hacer es tunear la configuración de nuestro servidor WEB para un rendimiento óptimo. De esto hablo en el artículo Optimizando el consumo de memoria de Apache (MaxClients).

Más adelante hablaré también de PHP-FPM, para mejorar el rendimiento de las aplicaciones PHP con Apache. Pero esto será otro día 😉

Deja un comentario