Optimizando KeepAlive en servidores Apache

En Tutoriales y Guías, Webmasters por

Como ya sabemos, Apache es uno de los servidores web más usados en internet, por ello todo administrador de sistemas debe conocer en profundidad sus características. En este artículo vamos a hablar de la opción KeepAlive incluida en el servidor Apache, más concretamente vamos a mostrar cómo configurar la opción KeepAlive correctamente para obtener un servidor Apache más estable y optimizado. Después de leer este artículo serás capaz de decidir por ti mismo si te conviene activar o desactivar KeepAlive.

Optimizando KeepAlive en servidores ApacheTenemos que partir de la base de que optimizar Apache se basa en sacrificar un recurso para optimizar otro, es decir, se trata de balancear el uso de los recursos.

¿Qué es Keep Alive en Apache?

El propio nombre de la opción nos da una idea de su funcionalidad, ya que KeepAlive traducido al español sería “MantenerVivo”, que como veremos a continuación es precisamente lo que conseguimos, mantener viva la conexión.

Cuando el servidor Apache recibe una petición HTTP, este establece una conexión para transferir los datos del archivo solicitado. Cuando finaliza la transferencia del archivo, Apache cierra esta conexión.

El método anterior es simple, pero no es el más eficiente, por ello se introdujo la opción KeepAlive que permite reusar una conexión abierta para transferir más de un archivo. Dicho de otra forma, con KeepAlive podemos usar la misma conexión para atender más de una petición sin tener que estar abriendo y cerrando constantemente conexiones.

Ventajas y desventajas de KeepAlive en Apache

El uso de Keep Alive tiene una serie de ventajas y desventajas que debemos conocer para valorar la situación de nuestro servidor y tomar las medidas adecuadas.

Ventajas de KeepAlive:

  • Mejora el tiempo de carga de nuestra web: el hecho de poder usar una misma conexión para transferir varios archivos, mejora el tiempo de carga de nuestra web y reduce la latencia, mejorando así la experiencia de usuario e incluso el SEO.
  • Reduce el uso de CPU: las páginas web tienen imágenes, archivos CSS, archivos JavaScript, etc… para transferir cada recurso nos haría falta abrir una conexión y después cerrarla, pero con KeepAlive activado no es necesario. Resumiendo, con KeepAlive evitamos abrir y cerrar conexiones constantemente, lo que reduce el uso de la CPU.

Desventajas de KeepAlive:

  • Incrementa el uso de memoria RAM: cuando activamos KeepAlive, las conexiones se mantienen abiertas para ser reusadas, lo que implica tener más procesos Apache activos y por tanto, más consumo de memoria RAM. Si desactivamos KeepAlive, mantendremos menos procesos Apache activos y por lo tanto reducimos el uso de la memoria RAM.

¿Cuándo debo activar o desactivar KeepAlive?

Ahora que ya conocemos las ventajas y desventajas de activar KeepAlive, podemos analizar qué factores debemos tener en cuenta a la hora de decidir si activar o no KeepAlive en nuestro servidor:

  • Recursos de nuestro servidor: debemos conocer los recursos de RAM y CPU de los que dispone nuestro servidor. Si el factor que nos limita es la memoria RAM, entonces podemos plantearnos desactivar KeepAlive (valorando antes las desventajas que esto supone). Si el factor que nos limita es la CPU, activar KeepAlive es nuestra mejor opción.
  • Tipología de nuestra web: si tu web enlaza a múltiples recursos almacenados en el servidor (imágenes, archivos CSS, archivos javascript, etc), disponer la opción KeepAlive activada mejorará significativamente el tiempo de carga y la experiencia de usuario.
  • Tipología del tráfico: si tu web recibe sus visitas repartidas a lo largo del día, mantener KeepAlive activado es buena opción. Por otro lado, si tu web recibe grandes cantidades de tráfico en momentos puntuales, mantener la opción KeepAlive activada puede suponer un agotamiento de la memoria RAM.

Configuración de KeepAlive en Apache

Para activar/desactivar KeppAlive y configurarlo debemos editar el archivo de configuración de Apache de nombre httpd.conf en la mayoría de los casos. En este archivo podemos configurar tres opciones de KeepAlive:

  • Activar y desactivar KeepAlive: según pongamos en la configuración KeepAlive on (activado) o KeepAlive off (desactivado).
  • Configurar el número máximo de peticiones que una conexión persistente puede atender: si ponemos en el archivo de configuración MaxKeepAliveRequests 50 estamos limitando a 50 el número máximo de peticiones que una conexión persistente puede atender. Como norma general, establecer un número entre 40 y 80 es buena opción.
  • Configurar el tiempo de espera en el que se mantiene la conexión abierta: si edito el archivo de configuración con la línea KeepAliveTimeout 5, establezco que el tiempo de espera sea de 5 segundos, si pasados esos 5 segundos no se recibe ninguna petición la conexión se cierra. Lo ideal es mantener un valor entre 1 y 5 segundos para esta opción (establecer valores muy altos puede causar un consumo excesivo de memoria RAM).

Otros ajustes de Apache relacionados con KeepAlive

Dependiendo del tipo de módulo multiprocesamiento de Apache que usemos tendremos que configurar unas u otras opciones. En este caso voy a hablar sólo las opciones que afectan al módulo Apache Prefork (mpm-prefork):

  • MaxClients: establece el número máximo de procesos hijo que puede iniciar Apache para atender a las peticiones. Si tenemos KeepAlive activado es buena opción incrementar el número máximo de clientes.
  • MaxRequestsPerChild: establece el número máximo de peticiones que un proceso hijo de Apache puede atender antes de ser finalizado. Si tenemos KeepAlive activado cada conexión persistente cuenta como una petición de proceso hijo. Como a su vez cada conexión persistente va a atender a varias peticiones, con KeepAlive activado podemos reducir el número de MaxRequestsPerChild.

Conclusión

Es difícil establecer una solución de optimización de Apache que se adapte a todos los servidores, ya que cada uno tendrá sus propios recursos y servirá a una tipología de web con un determinado tráfico. Lo que tenemos que hacer es analizar nuestro caso y a partir de ahí tomar las medidas oportunas para optimizar Apache. Por norma general, activar KeepAlive supone una mejora para los usuarios a cambio de un bajo coste de RAM.