El parámetro principal para ajustar el uso de memoria de Apache será MaxClients
. Un valor demasiado bajo y se quedará sin espacios disponibles para atender las solicitudes de los clientes. Demasiados y usará toda su RAM y comenzará a usar el espacio de intercambio que matará el rendimiento (puede parecer un bloqueo del servidor).
Una forma de ajuste MaxClients
es observar el uso de memoria del sistema y ajustar la configuración arriba / abajo según sea necesario. Si el servidor comienza a intercambiar, edítelo hacia abajo. Si el servidor tiene memoria libre, póngalo.
También puede estimar el valor máximo mirando el uso de memoria de Apache. Inicie top
y presione M
para ordenar los procesos por memoria. Deberías ver algo como:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Reste las columnas RES y SHR para obtener el uso aproximado de memoria por instancia de Apache. En este caso es de alrededor de 16 MB. Si tengo 4GB de RAM y deseo que se usen 3GB para Apache, la configuración de MaxClients estará alrededor:
MaxClients = 3000/16 = 188
Entonces, en este caso, podría comenzar con un valor de 150-200 pero vería el uso de la memoria y si alguna vez comenzara a acercarse al uso de swap, disminuiría los MaxClients 10-20%. También tenga en cuenta que el valor de 3GB es solo un ejemplo aleatorio. En los servidores que solo ejecutan Apache, podría usar casi todos los 4 GB. En otros casos, es posible que solo desee 1 o 2 GB para Apache, salvo el resto para otras aplicaciones, el sistema o la caché.
Editar: responder preguntas adicionales
Generalmente no hay valores mágicos de MaxClients u otros parámetros de configuración de Apache que harán que su servidor de repente sea dos veces más rápido. Parece que algunos servidores funcionan bien si MaxClients es 10 o 1000. Hay dos casos principales en los que la configuración de MaxClients es "incorrecta":
- Demasiado bajo : cuando MaxClients es demasiado bajo, llegará a una situación en la que se están utilizando todos los clientes de Apache y las nuevas conexiones entran en cola esperando que el próximo cliente esté disponible. Si habilita el mod_status de Apache, puede obtener una vista en tiempo real de cuántos clientes están ocupados en cualquier momento. Este estado es relativamente fácil de diagnosticar, ya que el sitio se ralentizará en momentos de mucho tráfico y se observará que todos los clientes están en uso.
- Demasiado alto : cuando MaxClients es demasiado alto, entrará en el caso de agotar toda la RAM y comenzará a usar el intercambio. Cuando esto ocurre, el rendimiento de su sitio caerá esencialmente a cero (considere la diferencia de velocidad entre la RAM y el disco). Este estado puede ser mucho más difícil de observar y diagnosticar, ya que un servidor funcionará bien con un MaxClients alto hasta que experimente un aumento en el tráfico. Por ejemplo, en un sitio que recibe algunas visitas por hora, puedo configurar MaxClients en 1000, mucho más de lo que admite RAM, pero nunca he visto un problema debido a que Apache solo necesita usar uno o dos clientes a la vez. Solo detectaré el problema cuando tenga un aumento en el tráfico, aumentando la cantidad de clientes utilizados simultáneamente, hasta que se agote la RAM y se necesite espacio de intercambio.
Si bien no conozco los detalles de su servidor, aplicación o tráfico, puedo sugerir los siguientes valores de configuración como punto de partida. Pruébelos, controle la carga y el uso del servidor y cambie la configuración según sea necesario.
- mod_status : habilítelo para que pueda ver el uso de Apache. Para obtener estadísticas más avanzadas, instale una aplicación de monitoreo como Zabbix / Nagios para que pueda rastrear el uso del servidor y los patrones de tráfico.
- MaxClients : establecido en un valor de 100-200. Comenzaría con un valor más bajo si no estoy seguro y monitorear el uso de memoria / CPU / Apache. Este será el parámetro principal para ajustar.
- MaxRequestsPerChild : especifica cuándo se reiniciará un cliente / hijo Apache. No hay un valor incorrecto (aunque valores muy pequeños pueden ser ineficientes) y dependerá del contenido que esté sirviendo. Para contenido dinámico, un valor grande distinto de cero (digamos 1000) evitará que sus procesos httpd se vuelvan demasiado grandes.
- Otros parámetros : si bien no he realizado una evaluación comparativa exhaustiva de los parámetros restantes, deberían tener un efecto relativamente menor a menos que los establezca en valores muy bajos o muy altos. El uso de los valores predeterminados debería estar bien para la mayoría de los sitios. Consulte la documentación del módulo Apache Prefork o Worker para obtener una descripción completa de los parámetros y cuál se utiliza en cada módulo (no tiene sentido intentar ajustar un parámetro que no utiliza).
- Benchmarking : a medida que ajusta los parámetros, recomendaría usar una herramienta de benchmarking como ab (ApacheBench) o asedio para obtener un número cuantitativo de las capacidades de su servidor. Confiar solo en la sensación o algo peor, ver si se bloquea o no, no es un buen método para ajustar los parámetros de un servidor web.