25 jun 2021

OPTIMIZACIÓN DE SERVIDORES WEB

Para mejorar el rendimiento de los servidores web se deben realizar algunos cambios en la configuración que estos tienen por defecto, en esta entrada vamos a explicar algunas de las modificaciones recomendadas en un servidor Apache para mejorar su rendimiento.



Para realizar el laboratorio que se explica en este articulo se utilizó un servidor CentOS 8, el cual cuenta con Apache, con el MPM Event y con PHP-FPM.

El primer paso para iniciar la optimización del servidor web es determinar el consumo de memoria RAM por parte de los procesos de Apache y php-fpm, para ello se descargó el script ps_mem.py de su repositorio oficial en Github.

wget https://raw.githubusercontent.com/pixelb/ps_mem/master/ps_mem.py

Posteriormente se ejecutó el script con el comando sudo python3 ps_mem.py

Para poder ejecutar este script se debe tener instalado el paquete Python3, si no se tiene este paquete instalado, se puede instalar con el comando sudo dnf install python3


De los procesos listados nos interesa la cantidad de procesos y el tamaño total de memoria RAM usados por httpd (5 : 54 MB) y php-fpm (2 : 53,6 MB).

Con estos datos y teniendo en cuenta que la máquina en la cual se realiza este laboratorio cuenta con 4 GB de memoria RAM y un procesador de 8 núcleos, se calculan los siguientes valores necesarios para la optimización.

Tamaño promedio por proceso httpd: 54/5 = 10,8.

Tamaño promedio por proceso php-fpm: 53,6 / 2 = 26,8.

Memoria reservada para el web server: (Se recomienda separar el 80% de la memoria RAM del equipo para los procesos del web server) 4000 * 80% = 3200

MaxRequestWorkers: Este valor se obtiene a partir de la siguiente formula:

MaxRequestWorkers = Memoria reservada para el web server / Tamaño promedio por proceso httpd

MaxRequestWorkers = 3200/10,8 = 296

Maxclients: Este valor se obtiene a partir de la siguiente formula

Maxclients = Memoria reservada para el web server / Tamaño promedio por proceso php-fpm

Maxclients = 3200/26,8 = 119

ServerLimit: El mismo valor asignado a MaxRequestWorkers (296)

StartServers: Es igual al número de núcleos del procesador (8)

pm.max_children: El mismo valor asignado a MaxClients (119)

pm.start_servers: Es igual al número de núcleos del procesador multiplicado por cuatro (32)

pm.min_spare_servers: Es igual al número de núcleos del procesador multiplicado por dos (16)

pm.max_spare_servers: El mismo valor asignado a pm.start_servers (32)

Luego de realizar los cálculos necesarios se procede a modificar los archivos de configuración de Apache y de PHP-FPM.

El archivo de configuración de Apache se encuentra generalmente en la ruta /etc/httpd/conf/httpd.conf y en este se añadieron las siguientes líneas:



El archivo de configuración de PHP-FPM generalmente se encuentra en la ruta /etc/php-fpm.d/www.conf y en este se realizaron las siguientes modificaciones:

pm = ondemand

pm.max_children = 29

pm.start_servers = 32

pm.min_spare_servers = 16

pm.max_spare_servers = 32

pm.max_requests = 1000


Una vez realizadas las modificaciones en los archivos de configuración, se reinician los servicios de Apache y php-fpm.

sudo service httpd restart

sudo service php-fpm restart

Finalmente se realiza una prueba de funcionamiento del web server, enviándole 5000 solicitudes con una concurrencia de 100 solicitudes al tiempo sin que se hayan presentado fallas ni en el envío de las solicitudes ni en el funcionamiento del web server.

ab -n 5000 -c 100



Esperamos que estas modificaciones les sean útiles en sus proyectos, sigan pendientes de nuestro blog que próximamente tendremos nuevas entradas relacionadas con este tema.

No hay comentarios:

Publicar un comentario

Tus Comentarios son Importantes para Nosotros Siéntete Libre De Opinar