Apache 2.4 unter Windows reagiert langsam und reagiert nicht mehr, wenn einige dynamische Seiten bereitgestellt werden

30

(Ich kenne die Antwort auf diese Frage. Ich poste dies, um die Antwort mit der Community zu teilen.)

Bei meiner lokalen (Windows 7) Instanz von Apache 2.4 kommt es beim Bereitstellen einiger URLs zu Verzögerungen oder Abstürzen, je nachdem, welchen Browser ich für den Zugriff auf diese URLs verwende .

Mit Firefox / Chrome reagiert Apache nur langsam auf bestimmte URLs. Die Trägheit tritt in etwa 20% der Fälle bei einer bestimmten URL auf. In diesem Fall gibt es eine Verzögerung von 5 Sekunden, während der Firefox den Status "Warten auf ..." anzeigt.

Mit Internet Explorer 9 bleibt Apache einfach hängen und beendet die Bearbeitung von Anforderungen (mit jedem Browser), bis es neu gestartet wird.

  • Dies scheint nur bei dynamischen (PHP-) Anforderungen zu geschehen, jedoch nicht bei allen. Tatsächlich tritt es nur an einer bestimmten Stelle auf. Andere PHP-basierte Sites auf demselben Computer funktionieren einwandfrei.
  • Es kann von Bedeutung sein, dass die problematische Site aus einer großen Anzahl von Unterdomänen (VirtualHosts) besteht.
  • Das Deaktivieren der Windows-Firewall und der Comodo-Firewall hilft nicht.
  • Das Problem tritt häufiger bei "geschäftigeren" Seiten auf (zusätzliche Anfragen für IFRAMES usw.)

Ich habe versucht, viele Änderungen vorzunehmen httpd.conf(z. B. KeepAlive deaktivieren, EnableMMAP, HostnameLookups), aber nichts scheint zu funktionieren.

Tomasz P. Szynalski
quelle
1
Sobald Sie einige Up-Votes haben, haben Sie den Ruf, die Antwort in eine echte Antwort zu verschieben, was Sie dann tun sollten. (Wenn nichts anderes, werden die Upvotes Ihnen mehr Ruf als.)
PJMORSE
1
Um diesen Beitrag hier über Google zu finden: Die folgende Lösung funktioniert auch für diesen Fehler: " (OS 64) Der angegebene Netzwerkname ist nicht mehr verfügbar.: AH00341: winnt_accept: Asynchronous AcceptEx failed ". Auf Deutsch: " (OS 64) Der angegebene Netzwerkname ist nicht mehr verfügbar.: AH00341: winnt_accept: Asynchronous AcceptEx failed. "
Uwe Keim

Antworten:

35

Beantwortet von Thomasz


Die Lösung besteht darin, Folgendes zu Ihrem Konto hinzuzufügen httpd.conf:

AcceptFilter http none
AcceptFilter https none

Unter Windows führt dies zum Deaktivieren der AcceptEx () - API (Teil von WinSock), die einige Leistungsverbesserungen bietet, aber wahrscheinlich mit der Comodo Firewall in Konflikt steht.

Das Versetzen der Comodo Firewall in den "Deaktivierten" Modus hilft nicht, da Anfragen wahrscheinlich immer noch den Netzwerkcode von Comodo durchlaufen. Ich denke, Comodo müsste komplett deinstalliert werden, um das Problem zu beheben (obwohl ich es nicht ausprobiert habe).

Wenn Sie ein ähnliches Problem mit Apache 2.2 haben, sollten Sie stattdessen die Win32DisableAcceptEx-Direktive verwenden.

Verweise

Zitat aus http://httpd.apache.org/docs/2.4/mod/core.html :

Die Standardwerte unter Windows sind:

AcceptFilter http data

AcceptFilter https data

Mpm_winnt von Window interpretiert den AcceptFilter zum Umschalten der AcceptEx () - API und unterstützt keine HTTP-Protokollpufferung. Es gibt zwei Werte, die die Windows AcceptEx () - API verwenden und Netzwerksockets zwischen Verbindungen wiederverwenden. data wartet, bis die Daten wie oben dokumentiert übertragen wurden, und die anfänglichen Datenpuffer- und Netzwerkendpunktadressen werden alle aus dem einzelnen Aufruf von AcceptEx () abgerufen. connect verwendet die AcceptEx () -API, ruft auch die Netzwerkendpunktadressen ab, aber wie none wartet die connect-Option nicht auf die erste Datenübertragung.

Unter Windows verwendet keiner accept () anstelle von AcceptEx () und recycelt keine Sockets zwischen Verbindungen. Dies ist nützlich für Netzwerkadapter mit defekter Treiberunterstützung sowie für einige virtuelle Netzwerkanbieter wie VPN-Treiber oder Spam-, Viren- oder Spyware-Filter.

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

Eric Fossum
quelle
1
Ich hatte Probleme mit IE10, die dazu führten, dass Apache2.4 (kein Comodo beteiligt) hängen blieb, bis der Dienst neu gestartet wurde - und das Ändern der .conf-Datei, um diese einzuschließen, behebte dies. Danke, dass du das gepostet hast.
Matt Lohkamp
1
Das hat auch bei mir funktioniert. Ich habe in meinem Blog auch weitere Referenzen gesammelt, da die Informationen zu diesem Thema derzeit sehr verstreut sind.
Stijn de Witt
3
Arbeitete für mich, Win 7 x 64. Ich frage mich, warum nonenicht die Standardeinstellung in Apache ist? Die meisten anderen "innovativen" Funktionen sind in Apache standardmäßig deaktiviert: P
rustyx
-1

Ich verwende Apache 2.4.16 auf einer Windows 7 Pro-Box, und meine Website funktioniert erst seit ungefähr zwei Wochen nicht mehr. Durch das Hinzufügen wurde das Problem behoben.

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
Zupfente
quelle
Abgestimmt, weil Ihre Antwort genau die gleiche ist wie die oben von @Eric Fossum.
Hargobind