Apache 2.4 en Windows responde lentamente, se bloquea al servir algunas páginas dinámicas

30

(Sé la respuesta a esta pregunta. Publicar esto solo para compartir la respuesta con la comunidad)

Mi instancia local (Windows 7) de Apache 2.4 experimenta retrasos o problemas al servir algunas URL, dependiendo del navegador que use para acceder a estas URL .

Con Firefox / Chrome, Apache tarda en responder en ciertas URL. La lentitud ocurre aproximadamente el 20% del tiempo en cualquier URL dada. Cuando ocurre, hay un retraso de 5 segundos durante el cual Firefox muestra el estado "Esperando ...".

Con Internet Explorer 9, Apache simplemente se cuelga y deja de atender cualquier solicitud (con cualquier navegador) hasta que se reinicie.

  • Esto parece ocurrir solo con solicitudes dinámicas (PHP), pero no todas. De hecho, solo ocurre en un sitio específico. Otros sitios basados ​​en PHP en la misma máquina funcionan bien.
  • Puede o no ser significativo que el sitio problemático consista en una gran cantidad de subdominios (VirtualHosts).
  • Deshabilitar Windows Firewall y Comodo Firewall no ayuda.
  • El problema parece más frecuente con páginas "más ocupadas" (solicitudes adicionales para IFRAMES, etc.)

He intentado muchos cambios httpd.conf(como deshabilitar KeepAlive, EnableMMAP, HostnameLookups) pero nada parece funcionar.

Tomasz P. Szynalski
fuente
1
Una vez que tenga algunos votos positivos, tendrá la reputación de mover la respuesta a una respuesta real, lo que debe hacer entonces. (Si nada más, los votos positivos te darán más reputación entonces.)
pjmorse
1
Para encontrar esta publicación aquí a través de Google: La solución a continuación también funciona para este error: " (OS 64) El nombre de red especificado ya no está disponible.: AH00341: winnt_accept: Asynchronous AcceptEx falló ". En alemán: " (OS 64) Der angegebene Netzwerkname ist nicht mehr verfügbar.: AH00341: winnt_accept: Asynchronous AcceptEx falló ".
Uwe Keim

Respuestas:

35

Respondido por Thomasz


La solución es agregar lo siguiente a su httpd.conf:

AcceptFilter http none
AcceptFilter https none

En Windows, esto tiene el efecto de deshabilitar la API AcceptEx () (parte de WinSock), que ofrece algunas mejoras de rendimiento, pero probablemente entre en conflicto con el firewall de Comodo.

Poner Comodo Firewall en modo "Desactivado" no ayuda porque las solicitudes probablemente todavía pasan por el código de red de Comodo. Creo que Comodo tendría que desinstalarse por completo para eliminar el problema (aunque no lo he probado).

Si tiene un problema similar con Apache 2.2, debe usar la directiva Win32DisableAcceptEx en su lugar.

Referencias

Citando de http://httpd.apache.org/docs/2.4/mod/core.html :

Los valores predeterminados en Windows son:

AcceptFilter http data

AcceptFilter https data

El mpm_winnt de Window interpreta el AcceptFilter para alternar la API AcceptEx (), y no admite el almacenamiento en búfer del protocolo http. Hay dos valores que utilizan la API de Windows AcceptEx () y reciclarán los sockets de red entre las conexiones. los datos esperan hasta que los datos se hayan transmitido como se documenta anteriormente, y el búfer de datos inicial y las direcciones de punto final de la red se recuperan de la invocación única de AcceptEx (). connect utilizará la API AcceptEx (), también recuperará las direcciones de punto final de la red, pero como ninguna, la opción connect no espera la transmisión de datos inicial.

En Windows, ninguno usa accept () en lugar de AcceptEx () y no reciclará sockets entre conexiones. Esto es útil para los adaptadores de red con soporte de controlador roto, así como para algunos proveedores de red virtual como controladores vpn o filtros de spam, virus o spyware.

Ver también: http://forums.comodo.com/help-for-comodo-antivirus/conflict-with-apache-t260.0.html;msg31636#msg31636

Eric Fossum
fuente
1
He tenido problemas con IE10 causando que Apache2.4 (sin comodo involucrado) se cuelgue hasta que se reinicie el servicio, y cambiar el .conf para incluirlos lo solucionó. Gracias por publicar esto.
Matt Lohkamp
1
Esto funcionó para mí también. También reuní algunas referencias más en mi blog ya que la información sobre este tema está muy dispersa en este momento.
Stijn de Witt
3
Trabajó para mí, gana 7 x64. Me pregunto por qué noneno es la configuración predeterminada en Apache. La mayoría de las otras características 'innovadoras' están deshabilitadas por defecto en Apache: P
rustyx
-1

Estoy ejecutando Apache 2.4.16 en un cuadro de Windows 7 Pro, y mi sitio web dejó de funcionar hace aproximadamente 2 semanas. Agregar esto solucionó el problema.

ServerRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.4"

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen XX.XX.XX.XX:80
Listen 80
AcceptFilter http none
AcceptFilter https none
valiente
fuente
Votado abajo porque su respuesta es exactamente la misma que la anterior por @Eric Fossum.
hargobind