¿Cómo Optimizar su Servidor Apache?

¿Cómo Optimizar su Servidor Apache?

Written by Felipe Bravo
Last update: Thursday, Oct 15, 2020

La configuración de Apache puede tener un efecto importante en el desempeño de su servidor. La manera más sencilla de incrementar el desempeño del servidor es desactivar los módulos que no son necesarios. Esta guía cubre la explicación de los módulos Apache, proporcionando información sobre cuáles módulos se deben desactivar, y otras opciones para optimizar el desempeño.

Nota:
Los pasos especificados en este tutorial requieren privilegios root. Asegúrese de seguir los pasos a continuación como root o usando el prefijo sudo.

Herramientas

Hay una variedad de herramientas que le pueden ayudar a determinar si necesita alterar la configuración de sus recursos, incluyendo el comando top y también el programa para realizar pruebas de carga Siege. Como requisito mínimo, debe familiarizarse con el uso de CPU y de RAM de su servidor. También puede utilizar los siguientes comandos para descubrir estadísticas de uso:

echo [PID]  [MEM]  [PATH] &&  ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20

Otras formas más específicas para la optimización de Apache incluyen el módulo mod_status de Apache y Apache2Buddy.

Apache mod_status

El módulo mod_status muestra información relacionada con las conexiones entrantes en el servidor, generando una página detallada de estatus. Puede ver un ejemplo de esta página en el propio sitio web de Apache.

  1. Abra el archivo de configuración de su sitio web. Este archivo suele estar ubicado en /etc/apache2/sites-available/ejemplo.com.conf en sistemas Debian/Ubuntu y en /etc/httpd/conf.d/vhost.conf dentro de sistemas CentOS/Fedora.

  2. Agregue lo siguiente al bloque <virtual_hosts>:
    Extracto del archivo: /etc/apache2/sites-available/example.com.conf (Debian/Ubuntu) o /etc/httpd/conf.d/vhost.conf (CentOS/Fedora)

     <Location /server-status>
       SetHandler server-status
       Order Deny,Allow
       Deny from all
       Allow from localhost
     </Location>
    
  3. El mod_status de Apache también ofrece una opción llamada ExtendedStatus, la cual proporciona información adicional sobre cada solicitud realizada a Apache. Para habilitar ExtendedStatus debe editar el archivo de configuración de Apache:
    Extracto del archivo: /etc/apache2/apache2.conf (Debian/Ubuntu) o /etc/httpd/confd/httpd.conf (CentOS/Fedora)
    ExtendedStatus On
    Nota:
    Habilitar la opción ExtendedStatus consume recursos adicionales del sistema.

  4. Reinicie Apache

    • Para Debian o Ubuntu:

        service apache2 restart
      
    • Para CentOS/Fedora

        yum install lynx
      
  5. Abra el archivo:

     lynx http://localhost/server-status
    

Apache2Buddy

El script Apache2Buddy es similar a MySQLTuner, este revisa su configuración de Apache y hace sugerencias con base en la memoria de procesos y la RAM general. A pesar de ser un programa bastante básico que se enfoca en la directiva MaxClients, Apache2Buddy es útil y puede ser usado ejecutando un solo comando:

	curl -L http://apache2buddy.pl/ | perl

Módulos de multiprocesamiento

Nota:
Antes de hacer cualquier cambio en su configuración de Apache, asegúrese de respaldar el archivo de configuración de Apache:

En Debian/Ubuntu

cp /etc/apache2/apache2.conf ~/apache2.conf.backup

En CentOS/Fedora

cp /etc/httpd/conf/httpd.conf ~/httpd.conf.backup

Apache ofrece dos módulos de multiprocesamiento (o 3 módulos en el caso de Apache 2.4) para la gestión de sus ajustes.

Cada módulo crea procesos hijos, que difieren principalmente en la forma en la cual manejan los hilos.

Prefork

El módulo prefork crea un número de procesos hijos al iniciarse, cada hijo maneja un único hilo. Debido a que estos procesos se ocupan solamente de un hilo a la vez, hacer solicitudes puede hacer que la velocidad se vea afectada en caso de que haya demasiadas solicitudes concurrentes. Si esto ocurre, algunas solicitudes simplemente deben esperar en cola para ser ejecutadas. Para manejar esto, aumente el número de procesos hijos generados, pero tenga en cuenta que esto también aumenta la cantidad de RAM utilizada. prefork es el módulo más seguro, y debe ser usado cuando se usan mods que no son seguros para hilos.

Worker

Los procesos hijos del módulo worker generan varios hilos por proceso, cada hilo está listo para recibir nuevas solicitudes. Esto permite que pueda entrar un mayor número de solicitudes concurrentes, lo que a su vez facilita el uso de RAM. En general, el módulo worker ofrece un mejor desempeño, pero es menos seguro que prefork y no puede ser usado con módulos que no sean seguros para hilos.

Event

El módulo event solo está disponible en Apache 2.4 y está basado en el worker MPM. Así como el worker, crea varios hilos por proceso hijo, con un hilo dedicado a las conexiones KeepAlive que se transmiten a los hilos hijos una vez que la solicitud ha sido realizada. Esto es bueno para varias conexiones concurrentes, especialmente aquellas que no están activas al mismo tiempo pero hacen alguna solicitud ocasional. Las funciones del event MPM son las mismas que las de un worker en un event de conexiones SSL.

Valores de los módulos

Una vez que seleccione su módulo de multiprocesamiento o MPM, deberá cambiar los valores dentro de la configuración. Estas configuraciones están ubicadas en /etc/apache2/apache2.conf si su sistema es Debian/Ubuntu, y el archivo /etc/httpd/conf/httpd.conf en CentOS/Fedora. El MPM luce así:

Extracto: /etc/apache2/apache2.conf (Debian/Ubuntu) o /etc/httpd/conf/httpd.conf (CentOS/Fedora)

<IfModule mpmpreforkmodule>
	StartServers          4
	MinSpareServers       20
	MaxSpareServers      40
	MaxClients           200
	MaxRequestsPerChild  4500
</IfModule>

Para otros MPMs remplace la línea <IfModule mpmpreforkmodule> por <IfModule mpmworkermodule> o <IfModule mpmeventmodule> para worker o event respectivamente.

El próximo paso para reconfigurar su servidor Apache es alterar la configuración arriba. Para hacerlo, necesita estar al tanto de lo que hace cada valor, y cuál es la mejor manera de cambiarlo.

La mejor forma de hacer cambios en la configuración es hacer pequeños cambios, e ir supervisando los efectos.

Nota:
Después de hacer alteraciones al archivo de configuración Apache, reinicie el servicio usando el comando service apache restart en Debian/Ubuntu o /bin/systemctl reload httpd.service en CentOS/Fedora.

StartServers

El valor StartServers indica el número de procesos hijos creados en el inicio, y es controlado dinámicamente dependiendo de la carga. Realmente hay pocas razones para cambiar este número, a menos que su servidor se reinicie muy frecuentemente y reciba un gran número de solicitudes tras reiniciarse.

MinSpareServers

Establece el número mínimo de procesos hijos en estado de suspensión o idle. Si hay menos procesos que el número MinSpareServer, se crearán más procesos nuevos a una tasa igual o menor de un proceso por segundo en Apache 2.2. Con Apache 2.4, esta tasa aumenta exponencialmente comenzando con 1 y terminando hasta con 32 hijos generados por segundo. El beneficio de este valor es que cuando llega una solicitud, esta puede ser manejada por un hilo en suspensión; en caso de que no haya un hilo disponible, Apache tendría que generar un nuevo hilo, consumiendo recursos y extendiendo el tiempo que toma una solicitud en ser atendida. Tenga en cuenta también que tener demasiados procesos en suspensión también tendría efectos adversos en el servidor.

MaxSpareServers

Establece el número máximo de procesos hijos en suspensión. Si el número de procesos procesos en suspensión es mayor al valor de MaxSpareServers, entonces estos serán terminados. A menos que su sitio web sea extremadamente ocupado, este número no debería colocarse en un valor demasiado alto, debido a que incluso los procesos en suspensión consumen recursos.

MaxClients

La cantidad máxima de solicitudes que pueden ser servidas simultáneamente, con cualquier número por encima del límite que está en cola. Si este valor es muy bajo, las conexiones enviadas a la cola eventualmente expirarán; sin embargo, si el valor es demasiado alto, causa que la memoria comience a hacer demasiados intercambios (swapping). Si este valor es aumentado por encima de 256, el valor ServerLimit también debe ser aumentado en consecuencia.

Una manera de calcular el mejor valor para esto es dividir la cantidad de RAM que usa cada proceso de Apache entre la cantidad de RAM disponible, dejando un espacio para otros procesos. Use ApacheBuddy para determinar estos valores, o los comandos especificados a continuación:

Para determinar la RAM que cada proceso de Apache utiliza, remplace httpd por apache2 si utiliza sistemas Debian o Ubuntu:

ps -ylC httpd --sort:rss

Divida el número entre 2048 para megabytes.

Para obtener información sobre el uso de memoria:

free -m

Para recibir una vista más completa de los recursos que está usando Apache, utilice el comando top.

MaxRequestsPerChild

Este valor limita el número de solicitudes que un servidor hijo maneja durante su vida útil. Una vez que el limita ha sido alcanzado, el servidor hijo muerte. Si se establece en 0, los servidores hijos están configurados para nunca expirar. El valor sugerido para este parámetro es unos cuantos miles, para prevenir la fuga de memoria. Tenga en cuenta que establecer este parámetro en un valor muy bajo puede ralentizar el sistema, ya que crear nuevos procesos consume recursos.

ServerLimit

Si debe aumentar el valor MaxClients por encima de 256, entonces aumente ServerLimit a un valor coincidente. Para hacerlo, agregue la línea de ServerLimit a su código MPM y altere el valor:

ServerLimit          256

KeepAlive

La directiva KeepAlive, cuando se coloca en "on" permite recibir varias solicitudes que provienen de la misma conexión TCP. Cuando se usa una conexión KeepAlive, se cuenta como una sola solicitud contra las directivas MaxRequestsPerChild. Este valor es mantenido fuera de su MPM, pero puede vincularse estrechamente con su selección de MPM.

Recursos adicionales

Este tutorial explica algunos de los conceptos básicos para optimizar su servidor web Apache en un enfoque teórico que no aborda la aplicación/implementación. Es importante entonces complementar la información aquí presentada con los siguientes recursos. Recuerde que no certificar la actualidad o precisión de los contenidos externos.

Cpanel/WHM

10 articles in this category.
Written by Felipe Bravo.