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:
servicio de sudo apache2 stop
- Espere 5 segundos y luego ejecute el siguiente comando para averiguar cuánta memoria virtual tiene en el servidor que es libre:
sudo free -ht
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.
- Inicie el servidor web Apache.
servicio sudo apache2 inicio
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:
sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {print "Apache Memory Usage (MB):" x / 1024; imprima "Tamaño de proceso promedio (MB):" x / ((y-1) * 1024)} '
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.
- Edite el archivo /etc/apache2/mods-enabled/mpm_prefork.conf y considere configurarlo con los siguientes valores predeterminados, reemplazando XXX con su cálculo MaxRequestWorkers:
`<IfModule mpm_prefork_module>`
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers XXX
ServerLimit XXX
MaxConnectionsPerChild 0
</IfModule>
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.
servicio sudo apache2 reiniciar
- Ahora repita el truco del navegador de 10 pestañas que hizo anteriormente, y vea si encuentra errores de configuración de Apache en el registro de errores del servidor web Apache:
sudo tail -f /var/log/apache2/error.log
... 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:
- Usar un CDN para descargas de archivos grandes, imágenes y scripts.
- Usar un servicio de almacenamiento en caché como CloudFlare u otros.
- Rehacer la estrategia de su sitio web o aplicación web para utilizar varios servidores web que actúen como una "aplicación web" detrás de un equilibrador de carga.
- Agregar más RAM al servidor y, por lo tanto, hacer este cálculo nuevamente.
- Ahora que el servidor Apache está sintonizado, es una especie de línea de base sintonizada. Deberá verificarlo en el transcurso de 2-3 semanas y buscar problemas de MaxRequestWorker en los registros de errores de Apache. A partir de eso, puede tomar una decisión sobre la optimización (consulte el paso 10). También puede instalar Munin con apt en Ubuntu y observar el rendimiento de Apache a lo largo del tiempo y trazar una idea de crecimiento antes de decidir que necesita hacer algo con respecto a la cantidad de tráfico que maneja el servidor web.