Apache2 - Eliminar modulos no utilizados

      
in Documentacion, apache2, Rendimiento
Apache2

Reducir consumo de memoria de procesos Apache

Para mejorar el rendimiento de nuestro servidor, tenemos varias soluciones, la primera y más sencilla, es reducir el consumo necesario para servir las páginas de nuestro sitio web.
 

Apache2 por defecto, viene con algunos módulos pre-cargados, que posiblemente no necesitamos o no utilizaremos en nuestra web, y que pueden ser prescindibles, pero que, si los dejamos, consumen recursos de nuestro servidor para cada proceso en ejecución.

Un mayor consumo del proceso Apache, provoca que lanzar nuevos procesos para servir las páginas tenga un mayor coste, y un mayor consumo de memoria, lo que hace que nuestra concurrencia, y en definitiva, el rendimiento del servidor web sea peor.

No vamos a entrar en detalle en este documento, en qué modo está nuestro servidor Apache, pero para un site con el módulo PHP por defecto, y sin un tuning de una instalación por defecto, suele ser MPM-PREFORK
Lo podemos comprobar así: (Ubuntu)

sudo apache2 -V | grep -A 2 'MPM:'
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)

Por defecto, para Ubuntu 12.04 y Apache 2.2, los modulos cargados son:
apachectl -M

Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

 

Ahora miramos el consumo de memoria de un proceso Apache:

ps -ylC apache2S    33 25816 25778  0  80   0  4480 76841 inet_c ?        00:00:00 apache2

En la columna 8 podemos ver que el tamaño real son 4,480MB por proceso.

 

Podemos calcular el consumo total de memoria de nuestros procesos Apache con:

ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Proccess Size (MB): "x/((y-1)*1024)}'Apache Memory Usage (MB): 227.805
Average Proccess Size (MB): 4.46676

En muchas ocasiones, y según requerimientos del site, los módulos mínimos "requeridos" son:
alias_module
deflate_module
dir_module
rewrite_module
mime_module
php5_module

En nuestro caso, trabajamos con clientes que tienen sitios web en Drupal6 o Drupal7, y según configuraciones podemos desactivar los siguientes:
a2dismod autoindex cgi dbd env negotiation reqtimeout setenvif
a2dismod authz_user authz_groupfile authz_default authn_file auth_basic
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 authz_host_module (shared)
 deflate_module (shared)
 dir_module (shared)
 mime_module (shared)
 php5_module (shared)
 rewrite_module (shared)
 status_module (shared)
Syntax OK

Ahora miramos el consumo de memoria de un proceso Apache:
ps -ylC apache2S    33 26112 26071  0  80   0  4092 76662 inet_c ?        00:00:00 apache2

En la columna 8 podemos ver que el tamaño real son 4,092MB por proceso.

Consumo total de memoria de nuestros procesos Apache con:
ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Proccess Size (MB): "x/((y-1)*1024)}'Apache Memory Usage (MB): 208.332
Average Proccess Size (MB): 4.08494

El módulo más costoso es el mod_php activado en Apache, si lo desactivamos un momento podemos comprobar el tamaño del proceso:
a2dismod php5
service apache2 restart
Ahora miramos el consumo de memoria de un proceso Apache:
ps -ylC apache2S    33 26543 26503  0  80   0  1524  1420 inet_c ?        00:00:00 apache2

Vemos que cada proceso ocupa 1,5MB.

CONCLUSION

Podemos reducir el tamaño de nuestro proceso Apache para reducir su consumo.
Existen otras posibles mejoras, como no utilizar el módulo mod_php de Apache, y utilizar mod_fcgi o PHP-FPM (FastCGI Process Manager), pero esto lo podemos evaluar en otro POST dedicado a evaluar las diferentes opciones.

Copyright © 1996-2018 Seavtec, S.L. Reservados todos los derechos.