Después de rascarme la cabeza tratando de averiguar por qué mi sitio respondía tan lentamente a pesar de que los recursos del servidor están bien, finalmente verifiqué el estado de Apache y descubrí:
78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers
Parece que mi apache está literalmente lleno con conexiones. Cualquier persona que intente visitar mi sitio se pone en una "lista de espera" hasta que Apache vuelva a estar libre.
Parece que tengo dos opciones.
A) Eleve el límite máximo de conexiones por encima de 256. Aunque según este artículo no es tan fácil:
De manera predeterminada, el parámetro MaxClients tiene un límite duro compilado de 256. Sin embargo, esto se puede cambiar volviendo a compilar Apache. Algunas distribuciones, o empresas de alojamiento, elevan este límite a un valor muy alto, como 512 o incluso 1024 para hacer frente a grandes cargas.
B) Localice los scripts que están ocupando demasiado tiempo. Esto me parece mucho más complicado, ya que la mayoría de los procesos de apache simplemente aparecen y luego desaparecen nuevamente. Además, los scripts PHP de mis sitios están optimizados bastante bien ... y una vez más, los recursos del servidor están bien:
Server load 2.69 (8 CPUs)
Memory Used 25.33% (2,039,108 of 8,048,804)
Swap Used 1.32% (54,156 of 4,095,992)
¿Qué opción (si alguna de ellas) debo elegir y cómo debo hacerlo?
EDITAR
Más información: Versión del servidor: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635
Conf HTTP: http://pastebin.com/yBeLt6mP
Ejemplo de solicitud parital: http://pastebin.com/vzUVDMPR
Alterne Text-Wrap si los bins de pasta aparecen raros.
fuente
Respuestas:
Ese artículo es inexacto;
MaxClients
puede elevarse por encima de 256 cuando se usa el MPM prefork (que es lo que supongo que está usando actualmente según su descripción del problema). De la documentación :ServerLimit
es el que tiene el límite compilado, pero está más allá de donde debería llegar sin que su servidor se encuentre con algún otro cuello de botella. Documentación :Entonces, si desea aumentar el límite de su cliente a algo así como 512, entonces:
También debe echar un vistazo a qué MPM está utilizando, ya que los MPM que no sean prefork son mejores para la escala. Ver aquí para más información.
fuente
httpd -l
. Supongo que eso significa que estoy ejecutando trabajador MPM?MaxClients
,ServerLimit
,ThreadsPerChild
, yThreadLimit
. ¿Puede proporcionar su configuración de trabajador actualhttpd.conf
?Sugeriría que use un proxy inverso, algo como nginx o lighttpd puede manejar muchas más conexiones que apache. Dependiendo de cómo usen sus sitios htaccess, también puede usar nginx / lighttpd con fcgi y renunciar completamente a apache.
fuente
httpd.conf
y su solución es extraer la mayor parte del software que tiene en funcionamiento y reemplazarlo? Cada pieza de software tiene sus problemas, pero el mal uso sin educación causa peores problemas.