Documentos de Académico
Documentos de Profesional
Documentos de Cultura
script)
ROBERTO TORMO / 24 OCTUBRE, 2017 / 1 COMMENT
El servidor es la parte más importante, puesto que es la que aloja nuestro sitio. Sin el servidor,
nuestro sitio no está en internet. Y sí, un servidor, además de mantenimiento, también requiere ser
optimizado.
Por lo general, los servidores web son apache, y vienen con una con guración que tiene ya muchos
lustros. Y que por lo tanto, no solo están pensados para pequeños servidores, sino que además, no
están directamente pensadas para el uso en scripts como WordPress, por ejemplo. Por lo tanto, hay
que optimizarlos.
Lo primero que hay que apuntar, es que cada servidor, es un mundo. Y que por lo tanto, lo que puede
valer para un servidor, puede no ser válido para otro. En este post vamos a explicar unas directrices
generales, por lo anteriormente comentado, cada servidor es un mundo, y requiere ser analizado de
forma especí ca.
Si pre eres dejar la optimización de tu servidor en manos de profesionales, puedes contar con
nuestros servidores dedicados administrados, o bien, con nuestros planes de administración de
servidores.
Entre las ventajas que cuenta Apache, además de ser de código abierto, es que es gratuito, y su
compatibilidad con Windows, Linux o MacOS.
Dada su popularidad, Apache tiene la ventaja de que está en constante desarrollo. Su rendimiento es
una de las principales razones por las que optar por el. Tiene la capacidad de absorber un número
muy elevado de visitas, y es posible aumentar este rendimiento ajustando variables que Apache nos
permite con gurar.
1 /etc/apache2/apache2.conf
1 /etc/httpd/conf/httpd.conf
Lo primero que tendríamos que hacer, es un backup de dicho archivo. A continuación, mediante una
herramienta de edición de textos, como nano, vi… pasaremos a optimizar las variables de Apache.
MPM Prefork
Prefork utiliza múltiples procesos secundarios con un hilo para cada uno de ellos. Y cada proceso,
nos gestionara una conexión cada vez. Prefork por lo tanto, utiliza mayor cantidad de memoria, que
worker. Aunque puede llegar a ser ligeramente más veloz. Pero su principal ventaja, es su diseño sin
hilos. Así pues, los módulos de terceros pueden usarse sin protección de hilos, siendo mucho más
fácil de depurar. Permite tener múltiples procesos secundarios, donde cada proceso nos genera un
hilo, siendo los procesos secundarios quienes gestionan las peticiones. Además, tiene mejor
aislamiento y estabilidad. Es recomendable para utilizar en scripts. Su desventaja, es un consumo de
memoria más elevado.
1 StartServers 8
2 MinSpareServers 5
3 MaxSpareServers 20
4 ServerLimit 256
5 MaxClients 256
6 MaxRequestsPerChild 4000
MPM Worker
Worker, por su parte, utiliza multiples procesos secundarios, cada uno de ellos con multiples hilos.
Cada hilo gestiona una conexion a la vez. Por lo tanto, Worker, como su nombre indica, esta
preparado para trabajar duro. Es una gran opcion para servidores con tra co elevado, consumiendo
menor memoria que Prefork. En general, Worker mejora el rendimiento de Prefork. No obstante, no es
tan estable como Prefork, y si uno de los hilos se suspende, todo el proceso terminará, afectando a
todos los hilos.
Worker tiene las siguientes directivas por defecto:
1 StartServers 2
2 MaxClients 150
3 MinSpareThreads 25
4 MaxSpareThreads 75
5 ThreadsPerChild 25
6 MaxRequestsPerChild 0
Para saber que modulo esta utilizando nuestro servidor, podemos ejecutar el siguiente comando:
Modulos
A la hora de optimizar, una buena idea, es comprobar que módulos estamos cargando, y comprobar
si realmente nos hacen falta. Como los casos de los módulos Prefork y Worker, no es necesario tener
ambos activos, porque Apache solo utilizara uno. Por lo tanto, ¿Para que cargarlo? Pues bien, el resto
de modulos, tambien seria interesante revisarlos, y comprobar si son necesarios. Como ejemplo, el
mod_expires, es uno de los que se suele cargar, y generalmente, es uno de los más utilizados. Expires
nos permite de nir variables de caché, o el mod_de ate, otro de los muy utilizados, para la
compresión de imágenes, por ejemplo. Pero muchos otros módulos puede que no se utilicen, y estén
usando memoria valiosa para nuestro servidor. Revisa que módulos estas cargando, comprueba para
qué sirven en la documentación de apache (http://httpd.apache.org/docs/current/mod/), y decide en
base al uso que se haga del servidor.
KeepAlive
Establece si el servidor permite más de una solicitud por conexión. Se puede utilizar, por ejemplo,
para que un cliente no consuma demasiados recursos. Si vemos, que nuestro servidor tiene
problemas porque recibe solicitudes de cientos y miles de IPs a la vez, debemos activar KeepAlive.
Por defecto, en CentOS, viene inactiva. Editaremos el archivo de con guración, y modi caremos:
1 KeepAlive On
MaxKeepAliveRequests
Es la cantidad máxima de solicitudes que atenderá el servidor en una conexión TCP. Podemos limitar
la cantidad de solicitudes permitidas por conexión. Si está con gurado en 0, se permiten solicitudes
ilimitadas.
Lo ideal para este valor, es que sea alto, para obtener más rendimiento del servidor. Un valor
apropiado, podrían ser 500.
1 MaxKeepAliveRequests 500
KeepAliveTimeout
De ne el número de segundos que apache esperará la nueva solicitud de los clientes conectados,
antes de cerrar la conexión. Lo ideal, es que teniendo KeepAlive activo, este valor sea bajo. Un valor
entre 1 y 5 sería lo ideal.
1 KeepAliveTimeout 5
Variables Prefork
En cuanto a Prefork, como ya hemos visto, dispone de 5 variables a de nir.
StartServers – Establece el número de procesos hijos del servidor creados al inicio. Es buena
idea un aumento de este número en un servidor de alta carga, para que el servidor esté
preparado para utilizar muchas conexiones. Un valor recomendable sería entre 5 y 15.
MinSpareServers – Establece la cantidad mínima de procesos hijo inactivos en el servidor. Para
servidores de alta carga, este valor debe ser ajustado. Un ejemplo de valor recomendable, seria
5.
MaxSpareServers – Establece la cantidad máxima de procesos hijos inactivos en el servidor.
Esta variable es recomendable que duplique la de MinSpareServers.
MaxClients – Establece cuántas solicitudes simultáneas podrá utilizar Apache. Al llegar a este
límite cualquier otro intento se pondrá en cola, y no se procesara hasta que nalice alguna. No
hay que confundir solicitudes simultáneas con visitas. Para ajustar esta variable, puedes utilizar
la fórmula de MaxClients = Memoria RAM Total – Memoria RAM utilizada para otro proceso,
exceptuando los procesos de apache / Memoria utilizada por un único proceso de Apache.
MaxRequestsPerChild – Esta directiva establece cuántas solicitudes manejara un proceso hijo
antes de terminar. Una vez se alcanza el límite, el proceso secundario, muere. Si el valor es 0, no
morirá nunca. Por lo tanto, lo ideal es que este valor esté en una variable entre 5000 y 1000.
Está, por lo tanto, sería nuestra con guración de prefork, para un servidor con WordPress, visitas
escalonadas, y que la memoria RAM no supone un problema.
1 StartServers 5
2 MinSpareServers 5
3 MaxSpareServers 10
4 ServerLimit 150
5 MaxClients 150
6 MaxRequestsPerChild 10000
¿DNS Lookup?
Por último, vamos a hablar sobre algo, que es la razón principal de que apache pueda ser lento. Es el
tiempo requerido para realizar la búsqueda DNS. En el access.log de Apache, este registrará el
nombre del host completo de cada conexión entrante. Esto consume una cantidad de tiempo
signi cativa, y mucho más, si acceden muchos usuarios a la vez.
Veri ca que HostnameLookups está en Off, ya que podría ser la causante de un problema en tu
servidor.
Conclusión
Optimizar Apache no tiene porque ser traumático. Y no es un problema. Es una solución a muchos
problemas. Puede ser tan importante como la optimización sobre el propio script. Una mala
optimización, nos puede llevar a perder visitas, y mucho dinero. Si no esta seguro de cómo proceder,
siéntete libre de dejarnos un comentario, o bien, puedes optar por nuestros servicios, tanto a nivel de
servidores dedicados, ya administrados, como con nuestros planes de administración.