93 176 00 43 info@nullseavtec.com
Apache2 - Eliminar modulos no utilizados
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 apache2
S 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
Loaded Modules:
a2dismod authz_user authz_groupfile authz_default authn_file auth_basic
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 apache2
S 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
Ahora miramos el consumo de memoria de un proceso Apache:
service apache2 restart
ps -ylC apache2
S 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.
|