Actualmente en mi Apache 2 (Apache 2.4.7 para ser exactos) en Ubuntu 14.04, tengo esta configuración:
/etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 100
MaxSpareServers 250
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
El servidor es un servidor de Amazon de 8GB (RAM) que no hace más que cargar un formulario de registro de tres páginas para algunas campañas publicitarias de Google.
Encontré un script llamado apachetuneit.sh en la web, pero luego de un tiempo Apache informaba este error:
[Mar 21 de abril 16: 45: 42.227935 2015] [mpm_prefork: error] [pid 1134] AH00161: el servidor alcanzó la configuración MaxRequestWorkers, considere aumentar la configuración MaxRequestWorkers
¿Cómo puedo juzgar cómo establecer esta configuración?
Estoy preguntando específicamente solo cómo ajustar Apache 2.4 y nada más. Es por eso que esta pregunta es diferente de esta pregunta .
fuente
Respuestas:
Reconozca que Ubuntu 14.04 usa Apache 2 con PHP ejecutándose a través de un módulo mpm_prefork , del cual hay un archivo editable en /etc/apache2/mods-enabled/mpm_prefork.conf. Además, reconozca que a partir de Apache 2.4, MaxClients ahora se renombra como MaxRequestWorkers , por lo que cualquier documentación relacionada con MaxClients debe cambiarse a MaxRequestWorkers.
Detenga el servicio web Apache con el siguiente comando, temporalmente:
Lea la línea Mem: y mire la columna libre. Considere esto como la cantidad de RAM que puede dedicar a Apache, aunque generalmente me gusta deducir 2GB en un servidor más robusto (como en> 4GB), o 1GB en un servidor más ligero. Entonces, si la columna gratuita dice que tengo 13GB gratis, recomendaría darle a Apache 11GB. Esa es una línea de base. Si encontramos algún problema con la base de datos en los registros ocasionalmente (como 3 veces en los registros durante un período de 3 días) que necesita más memoria, entonces podríamos considerar que solo teníamos 10 GB para jugar en lugar de 11 GB (en este caso ) Si encontramos en los registros de Apache que el servidor necesita más MaxRequestWorkers, entonces ese es un problema separado que abordaré a continuación.
Abra como 10 pestañas del navegador, conéctese a algunas de sus páginas más largas o de carga más lenta desde su sitio web, y actualice como 3-4 veces en cada pestaña.
Después de hacer eso, rápidamente ahora ejecuta el siguiente comando:
Ejecútalo como 5 veces rápidamente.
Mire el valor de Tamaño de proceso promedio y promedie ese valor entre las 5 veces que lo ejecutó.
Ahora haga los siguientes cálculos y asegúrese de convertir GB a MB según sea necesario para que todos los números estén en valores MB. Por lo tanto, multiplique por 1024 o divida por 1024, según el camino que deba seguir.
MaxRequestWorkers = Línea de base libre (con espacio de almacenamiento intermedio) / Tamaño de proceso promedio
Por ejemplo, tenía un servidor de 14 GB, pero cuando Apache se detuvo, el servidor mostró que usaba 1 GB de RAM en inactivo. Luego proporciono otro 1GB en algún espacio de búfer adicional para el sistema operativo en caso de que lo necesite. Eso significa que tendría una línea de base libre de 12 GB. Ahora debo convertirlo de GB a MB, por lo que multiplico 12 x 1024 y obtengo 12288. El 12288 MB es mi valor libre de referencia. En mi caso, vi que el tamaño promedio del proceso era de 21 MB. Entonces, tomo 12288/21 y obtengo aproximadamente 585. Ahora, es común que los sysops redondeen este valor, y obtuve 580.
Tenga en cuenta que es posible que no vea el parámetro ServerLimit allí. Añádelo. Este parámetro predeterminado es 256 si no está presente, pero debe ser el mismo valor que MaxRequestWorkers o obtendrá un error.
Otro factor crítico en su configuración de Apache es el archivo /etc/apache2/apache2.conf con la variable Timeout y se mide en segundos. Este es el tiempo que puede enviar o recibir del servidor antes de que se agote el tiempo de espera. También debe tener en cuenta la carga o descarga de un archivo, como si tiene un sitio web donde las personas pueden cargar o descargar CSV u otros archivos grandes, por ejemplo. Y debe tener en cuenta un servidor de base de datos ocupado y dónde podría necesitar proporcionar algo de tiempo antes del tiempo de espera de las páginas. Cuanto más pequeña sea esa variable de Tiempo de espera, más disponible estará el servidor web para recibir nuevas conexiones. Sin embargo, tenga en cuenta que establecer este valor demasiado bajo puede causar estragos en las variables de sesión de PHP, aunque no con las cookies basadas en sesión del navegador. Entonces, por ejemplo, un valor de 300 (5 minutos) podría ser bueno para un servidor web que se basa en variables de sesión PHP para el flujo de trabajo de la aplicación web en lugar de las cookies de sesión del navegador. Un valor de 45 podría ser bueno para un servidor web que no sirve más que páginas estáticas de publicidad, pero sería terrible para un servidor que necesita utilizar mucho las variables de sesión PHP. Por lo tanto, edite el parámetro Timeout en este archivo a la cantidad que necesita. Esto puede tomar algunas pruebas con todas sus páginas web para ver si el valor es demasiado bajo. Sin embargo, probablemente sea una buena idea no establecerlo por encima de 300 a menos que tenga problemas al cargar o descargar archivos de gran tamaño. pero sería terrible para un servidor que necesita utilizar las variables de sesión PHP en gran medida. Por lo tanto, edite el parámetro Timeout en este archivo a la cantidad que necesita. Esto puede tomar algunas pruebas con todas sus páginas web para ver si el valor es demasiado bajo. Sin embargo, probablemente sea una buena idea no establecerlo por encima de 300 a menos que tenga problemas al cargar o descargar archivos de gran tamaño. pero sería terrible para un servidor que necesita utilizar las variables de sesión PHP en gran medida. Por lo tanto, edite el parámetro Timeout en este archivo a la cantidad que necesita. Esto puede tomar algunas pruebas con todas sus páginas web para ver si el valor es demasiado bajo. Sin embargo, probablemente sea una buena idea no establecerlo por encima de 300 a menos que tenga problemas al cargar o descargar archivos de gran tamaño.
Ahora reinicie su servicio web Apache. Si hizo algo mal, Apache probablemente le informará al respecto en el momento en que lo inicie nuevamente, y puede rectificarlo.
... presione CTRL + C para salir de eso, si lo desea.
Busque una queja sobre la necesidad de MaxRequestWorkers (y recientemente desde que reinició el servidor web). Si ve eso incluso con una configuración óptima de MaxRequestWorkers, es probable que necesite más potencia de fuego para sus sitios web o aplicaciones web. Considere estas opciones:
fuente
sudo
deben mostrarse como código, no como texto normal. Seguí la documentación sobre el formato, pero aún lucho aquí.Lo que puede aumentar a MaxRequestWorkers depende de la cantidad de RAM que ocupa cada uno de sus procesos httpd / apache. Si cada uno ocupa 50 MB (solo elige un número aleatorio), cada 20 trabajadores de solicitud que tenga en uso a la vez (es decir, conexiones concurrentes) ocuparán 1 GB. Entonces, en ese ejemplo, podría tener como máximo 8GB * 20 = 160 MaxRequestWorkers. Sin embargo, no puede usar toda la RAM para apache, debe reservar algo para otras cosas que se ejecutan allí. También dejar algo de RAM adicional puede ser útil para el rendimiento, ya que el sistema operativo lo usará para almacenar cosas en caché y acelerar el rendimiento (aunque puede ser preferible no quedarse sin conexiones en lugar de que el servidor sea más rápido ya que el sitio parecerá lento mientras los navegadores de los usuarios esperan que haya una conexión disponible si se agotan).
fuente
free
comando para obtener una línea base de memoria. Luego aumente la cantidad de procesos que se ejecutan aumentando MinSpareServers, reiniciando apache, ejecutándosefree
nuevamente y haciendo los cálculos. Consulte moreofless.co.uk/apache-memory-usage para obtener más detalles y explicaciones.