Apache 2.4 sur Windows répond lentement, se bloque lors du service de certaines pages dynamiques

30

(Je connais la réponse à cette question. Publier ceci juste pour partager la réponse avec la communauté)

Mon instance locale (Windows 7) d'Apache 2.4 connaît des retards ou des blocages lors de la diffusion de certaines URL, selon le navigateur que j'utilise pour accéder à ces URL .

Avec Firefox / Chrome, Apache est lent à répondre sur certaines URL. La lenteur se produit environ 20% du temps sur une URL donnée. Quand cela se produit, il y a un délai de 5 secondes pendant lequel Firefox affiche un état "En attente de ...".

Avec Internet Explorer 9, Apache se bloque simplement et cesse de servir toutes les demandes (avec n'importe quel navigateur) jusqu'à ce qu'il soit redémarré.

  • Cela semble se produire uniquement avec les demandes dynamiques (PHP), mais pas toutes. En fait, cela ne se produit que sur un site spécifique. D'autres sites basés sur PHP sur la même machine fonctionnent bien.
  • Il peut être significatif ou non que le site problématique se compose d'un grand nombre de sous-domaines (VirtualHosts).
  • La désactivation du pare-feu Windows et du pare-feu Comodo n'aide pas.
  • Le problème semble plus fréquent avec les pages "plus occupées" (demandes supplémentaires pour IFRAMES etc.)

J'ai essayé de nombreuses modifications httpd.conf(comme la désactivation de KeepAlive, EnableMMAP, HostnameLookups) mais rien ne semble fonctionner.

Tomasz P. Szynalski
la source
1
Une fois que vous aurez obtenu des votes positifs, vous aurez la réputation de transformer la réponse en une vraie réponse, ce que vous devriez faire ensuite. (Si rien d'autre, les votes positifs vous donneront alors plus de réputation.)
pjmorse
1
Pour trouver cette publication ici via Google: La solution ci-dessous fonctionne également pour cette erreur: " (OS 64) Le nom de réseau spécifié n'est plus disponible.: AH00341: winnt_accept: Asynchronous AcceptEx a échoué. ". En allemand: " (OS 64) Der angegebene Netzwerkname ist nicht mehr verfügbar.: AH00341: winnt_accept: Asynchronous AcceptEx a échoué. ".
Uwe Keim

Réponses:

35

Répondue par Thomasz


La solution consiste à ajouter ce qui suit à votre httpd.conf:

AcceptFilter http none
AcceptFilter https none

Sous Windows, cela a pour effet de désactiver l'API AcceptEx () (qui fait partie de WinSock), qui offre des améliorations de performances, mais est probablement en conflit avec le pare-feu Comodo.

Mettre le pare-feu Comodo en mode "Désactivé" n'aide pas car les demandes passent probablement toujours par le code réseau de Comodo. Je pense que Comodo devrait être complètement désinstallé pour éliminer le problème (même si je ne l'ai pas essayé).

Si vous rencontrez un problème similaire avec Apache 2.2, vous devez utiliser la directive Win32DisableAcceptEx à la place.

Les références

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

Les valeurs par défaut sous Windows sont:

AcceptFilter http data

AcceptFilter https data

Le mpm_winnt de Windows interprète le AcceptFilter pour basculer l'API AcceptEx (), et ne prend pas en charge la mise en mémoire tampon du protocole http. Il existe deux valeurs qui utilisent l'API Windows AcceptEx () et recyclent les sockets réseau entre les connexions. Les données attendent que les données aient été transmises comme indiqué ci-dessus, et les adresses initiales de tampon de données et de point de terminaison réseau sont toutes récupérées à partir de l'appel unique AcceptEx (). connect utilisera l'API AcceptEx (), récupérera également les adresses des points de terminaison réseau, mais comme aucune, l'option connect n'attend pas la transmission de données initiale.

Sous Windows, aucun n'utilise accept () plutôt que AcceptEx () et ne recyclera les sockets entre les connexions. Ceci est utile pour les adaptateurs réseau avec une prise en charge de pilote défectueuse, ainsi que pour certains fournisseurs de réseau virtuel tels que les pilotes vpn ou les filtres anti-spam, anti-virus ou anti-spyware.

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

Eric Fossum
la source
1
J'ai eu des problèmes avec IE10 provoquant le blocage d'Apache2.4 (aucun comodo impliqué) jusqu'au redémarrage du service - et la modification du fichier .conf pour les inclure l'a corrigé. Merci d'avoir posté ça.
matt lohkamp
1
Cela a également fonctionné pour moi. J'ai également rassemblé quelques références supplémentaires sur mon blog car les informations sur ce sujet sont très dispersées en ce moment.
Stijn de Witt
3
A travaillé pour moi, Win 7 x64. Je me demande pourquoi ce nonen'est pas le paramètre par défaut dans Apache? La plupart des autres fonctionnalités «innovantes» sont désactivées par défaut dans Apache: P
rustyx
-1

J'utilise Apache 2.4.16 sur une boîte Windows 7 Pro, et mon site Web a juste cessé de fonctionner il y a environ 2 semaines. L'ajout de cela a résolu le problème.

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
pluckyduck
la source
Voté parce que votre réponse est exactement la même que celle ci-dessus de @Eric Fossum.
hargobind