5 consejos para mejorar el rendimiento de su servidor web Apache

SUGERENCIA # 1: Mantenga siempre actualizado Apache a su última versión

No hace falta decir que tener instalada la última versión de Apache es probablemente una de las primeras cosas que debe considerar. Al 19 de noviembre de 2015, la última versión de Apache disponible en los repositorios de CentOS 7 es 2.4.6, mientras que en Debian es 2.4.10.

Como regla general, siga el método de actualización proporcionado por el administrador de paquetes de su distribución elegida (yum update httpd o aptitude safe-upgrade apache2, para CentOS o Debian, respectivamente) a menos que no haya otra forma. Puede leer las notas de la versión más reciente en la sección Documentación de Apache en el sitio web del proyecto del servidor HTTP Apache.

SUGERENCIA # 2: Si está utilizando un Kernel anterior a 2.4, considere actualizar ahora

¿Por qué? Las versiones 2.4 y superiores del kernel tienen habilitada la llamada al sistema del kernel sendfile de forma predeterminada. Eso, a su vez, facilita las transferencias de archivos de red de alto rendimiento (que se desean en el contexto de las comunicaciones servidor-cliente web) y permite que Apache entregue contenido estático más rápido y con menor utilización de la CPU al realizar operaciones de lectura y envío simultáneas.

Puede ver su kernel actualmente instalado con:

Aunque es un proceso no destinado a principiantes, la actualización de su kernel es un ejercicio interesante para aprender más sobre las funciones internas de Linux.

SUGERENCIA # 3: Elija el Módulo de multiprocesamiento (MPM) que mejor se adapte a su caso

En la práctica, los MPM amplían la funcionalidad modular de Apache permitiéndole decidir cómo configurar el servidor web para que se vincule a los puertos de red de la máquina, acepte solicitudes de clientes y utilice procesos secundarios (y subprocesos, alternativamente) para manejar tales solicitudes.

A partir de la versión 2.4, Apache ofrece tres MPM diferentes para elegir, según sus necesidades:

  • El MPM de prefork utiliza varios procesos secundarios sin subprocesos. Cada proceso maneja una conexión a la vez sin crear subprocesos separados para cada uno. Sin entrar en demasiados detalles, podemos decir que querrá usar este MPM solo cuando depure una aplicación que use, o si su aplicación necesita lidiar con módulos no seguros para subprocesos como mod_php.
  • El Worker MPM utiliza varios subprocesos por proceso hijo, donde cada subproceso maneja una conexión a la vez. Esta es una buena opción para servidores de alto tráfico, ya que permite manejar más conexiones simultáneas con menos RAM que en el caso anterior.
  • Finalmente, el evento MPM es el MPM predeterminado en la mayoría de las instalaciones de Apache para las versiones 2.4 y superiores. Es similar al trabajador MPM en que también crea múltiples subprocesos por proceso hijo pero con una ventaja: hace que KeepAlive o conexiones inactivas (mientras permanecen en ese estado) sean manejadas por un solo subproceso, liberando así memoria que puede ser asignado a otros subprocesos. Este MPM no es adecuado para su uso con módulos no seguros para subprocesos como mod_php, para los cuales se debe usar un reemplazo como PHP-FPM.

Para verificar el MPM usado por su instalación de Apache, puede hacer:

La siguiente imagen muestra que este servidor web en particular está utilizando el MPM prefork.

Check Apache MPM

Para cambiar esto, deberá editar:

Donde <mpm> puede ser mpm_event, mpm_worker o mpm_prefork.

y descomente la línea que carga el módulo deseado así:

Nota: Para que el evento MPM funcione en Debian, es posible que deba instalar el paquete libapache2-mod-fastcgi desde los repositorios que no son libres.

Además, para CentOS necesitará php-fpm (junto con fcgi y mod_fcgid) mientras que en Debian se llama php5-fpm (junto con apache2-mpm-event).

Por último, pero no menos importante, reinicie el servidor web y el servicio php-fpm (o php5-fpm) recién instalado:

Aunque puede configurar Apache para que use un MPM específico, esa configuración puede anularse por host virtual de la misma manera que se indicó anteriormente.

Simplemente coloque las etiquetas correspondientes en el archivo de configuración para cada host virtual y estará listo para comenzar, pero asegúrese de estar usando una y solo una MPM por vhost.

Finalmente, tenga en cuenta que independientemente de la distribución que elija, php-fpm se basa en la implementación de FastCGI, que es la razón por la que recomendé las instalaciones de paquetes adicionales anteriormente.

Para obtener más detalles y ejemplos sobre php-fpm y cómo puede, junto con el evento MPM, aumentar el rendimiento de Apache, debe consultar la documentación oficial.

Esto es lo que veo después de cambiar el MPM predeterminado de prefork a event en el mismo cuadro que se muestra en la imagen anterior:

Choose Apache MPM Module

Si al reiniciar el httpd esta sacando error: Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe:

Debemos quitar e modulo mod_php

SUGERENCIA # 4: Asigne RAM sabiamente para Apache

Quizás el elemento de hardware más crítico a tener en cuenta es la cantidad de RAM asignada para cada proceso de Apache. Si bien no puede controlar esto directamente, puede restringir el número de procesos secundarios a través de la directiva MaxRequestWorkers (anteriormente conocida como MaxClients en Apache 2.2), que pondrá límites al uso de RAM por parte de Apache. Nuevamente, puede establecer este valor por host o por host virtual.

Para hacer esto, debe tomar nota de la cantidad promedio de RAM utilizada por Apache, luego multiplicarla por la cantidad de MaxRequestWorkers, y esa es la cantidad de memoria que se asignará para los procesos de Apache. Una cosa que nunca querrá que haga su servidor web es comenzar a usar swap, ya que eso disminuirá significativamente su rendimiento. Por lo tanto, siempre debe mantener el uso de RAM por parte de Apache dentro de los límites que puede pagar y nunca confiar en el intercambio.

Por ejemplo, el siguiente bloque restringirá el número de clientes simultáneos a 30. Si más clientes acceden al host, pueden experimentar un retraso o una falla momentánea que se puede resolver fácilmente actualizando el navegador. Si bien esto puede considerarse indeseable, es más saludable para el servidor y, a la larga, también es mejor para su sitio.

Puede colocar este bloque dentro de /etc/httpd/conf/httpd.conf o /etc/apache2/apache2.conf, dependiendo de si está usando CentOS o Debian.

Tenga en cuenta que el mismo principio se aplica a todos los MPM: estoy usando event aquí para continuar con el concepto descrito en el consejo anterior:

En cualquier caso, se recomienda encarecidamente que consulte los documentos de Apache 2.4 para ver qué directivas están permitidas para su MPM elegido.

SUGERENCIA # 5: Conozca sus aplicaciones

Como regla general, no debe cargar ningún módulo de Apache que no sea estrictamente necesario para que su aplicación funcione. Esto requerirá al menos un conocimiento general de las aplicaciones que se ejecutan en su servidor, especialmente si es un administrador del sistema y hay otro equipo a cargo del desarrollo.

Puede enumerar los módulos cargados actualmente con:

Para descargar / deshabilitar módulos en CentOS, deberá comentar la línea que comienza con LoadModule (ya sea en el archivo de configuración principal o en uno auxiliar dentro de /etc/httpd/conf.modules.d.

Por otro lado, Debian proporciona una herramienta llamada a2dismod para deshabilitar módulos y se usa de la siguiente manera:

Para volver a habilitarlo:

En cualquier caso, recuerde reiniciar Apache para que los cambios surtan efecto.

Resumen

En este artículo, hemos revisado 5 consejos que le ayudarán a ajustar el servidor web Apache y aumentar su rendimiento. Además, debe recordar que la optimización y el rendimiento sin seguridad no tienen sentido, por lo que es posible que desee consultar la instalación de mod_pagespeed para mejorar el rendimiento del servidor web y el artículo de consejos de refuerzo de Apache en Tecmint.com también.

Dado que no podemos cubrir adecuadamente todos los aspectos de este tema en este artículo, quizás piense en otras ideas que le gustaría compartir con el resto de la comunidad. Si es así, no dude en hacérnoslo saber utilizando el formulario de comentarios a continuación.

Deja una respuesta