Estoy ejecutando un sitio de tráfico intenso con mucho contenido dinámico, principalmente generado por el usuario.
El servidor es dedicado y tiene un total de 4 procesadores Intel (R) Xeon (R) CPU X3210 @ 2.13GHz. Necesito conocer los valores óptimos para las directivas de Apache ServerLimit y MaxClients, teniendo en cuenta que el servidor tiene 4 GB de RAM y la base de datos MySQL se ejecuta en un servidor separado. El panel es DirectAdmin con CentOS.
A continuación se encuentran mis directivas actuales, pero durante las horas pico con más de 5k usuarios, se nota un retraso importante, y no es completamente culpa de MySQL, porque las páginas parecen generarse rápidamente (implementé un contador de tiempo de generación de páginas), pero hay un largo retraso de conexión hasta que la página comience a responder y se envíe al navegador.
<IfModule prefork.c>
StartServers 800
MinSpareServers 20
MaxSpareServers 60
ServerLimit 900
MaxClients 900
MaxRequestsPerChild 2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5
Debo mencionar que al monitorear el servidor usando el comando superior, el uso de la CPU nunca va más allá del 20% ~ 30% en la hora pico. El servidor MySQL también tiene un uso del 30 ~ 50% en ese momento, y estoy trabajando constantemente para solucionar consultas lentas, pero ese es un problema diferente. Sé que no es un cuello de botella de DB porque las páginas estáticas también tardan mucho en cargar en las horas pico.
Cualquier consejo para optimizar estos valores será muy apreciado, gracias.
fuente
Necesita obtener el tamaño promedio de su proceso de apache. Con este número y el tamaño total de su RAM, puede calcular la directiva MaxClients. Recuerde esto: "Un servidor web nunca debería tener que intercambiar" ( Apache Performance Tuning )
Monitorear con top o htop está bien, pero necesita una mejor vista de todas las estadísticas de sus servidores (CPU, RAM, E / S de disco, solicitudes de Apache, consultas lentas de MySQL, etc.) con alguna herramienta de monitoreo como ganglia o munin para encontrar posibles cuellos de botella.
fuente
Recomiendo jugar con la herramienta de referencia (ab) de apache. Puede jugar con los valores para que coincidan con su flujo de tráfico y ver qué tipo de respuestas está obteniendo en cuanto al tiempo promedio de carga y similares. En ese momento, puedes jugar con la configuración de la que estás hablando para intentar optimizarla. Debería ser capaz de controlar el rendimiento óptimo de cada ajuste de rendimiento con ab.
Realmente no sería prudente para mí hablar sobre su configuración, sin embargo, también debe tener en cuenta su RAM porque parece que está comiendo mucha RAM con esa configuración. Aunque eso es solo especulación sin ningún dato. htop le brinda una buena lectura visual de sus recursos.
También su promedio de carga podría decir mucho. Dudo que su uso sea mucho más alto que su cantidad total de núcleos de 20-30% de CPU, pero es otro indicador de cuán duro está trabajando realmente su servidor.
fuente