Windows上的Apache 2.4响应缓慢,服务一些动态页面时挂起


30

(我知道这个问题的答案。发布此信息只是为了与社区分享答案)

在提供某些URL时,我的Apache 2.4本地(Windows 7)实例遇到延迟挂断,具体取决于我使用哪种浏览器访问这些URL

使用Firefox / Chrome,Apache 对某些URL的响应速度。在任何给定的URL上,呆滞发生的时间约为20%。发生这种情况时,Firefox将有5秒钟的延迟,在此期间Firefox会显示“正在等待...”状态。

使用Internet Explorer 9,Apache会简单地挂起并停止(使用任何浏览器)处理任何请求,直到重新启动为止。

  • 这似乎仅在动态(PHP)请求中发生,而并非在所有请求中都发生。实际上,它仅在一个特定站点上发生。同一台计算机上的其他基于PHP的站点都可以正常工作。
  • 问题站点包含大量子域(VirtualHosts)可能重要,也可能不重要。
  • 禁用Windows防火墙和Comodo防火墙无济于事。
  • 该页面似乎在“繁忙”的页面上更为常见(对IFRAMES的其他请求等)

我尝试了许多更改httpd.conf(例如禁用KeepAlive,EnableMMAP,HostnameLookups),但似乎没有任何效果。


1
投票通过后,您将有声誉将答案转化为真实答案,然后您应该这样做。(如果没有其他选择,那么投票将为您赢得更多声誉。)
pjmorse 2012年

1
若要通过Google在此处查找此发布:以下解决方案也适用于该错误:“ (OS 64)指定的网络名称不再可用。:AH00341:winnt_accept:异步AcceptEx失败。 ”。用德语:“ (OS 64)网络安全性:AH00341:winnt_accept:异步AcceptEx失败。 ”。
Uwe Keim

Answers:


35

托马斯回答


解决方案是将以下内容添加到您的httpd.conf

AcceptFilter http none
AcceptFilter https none

在Windows上,这具有禁用AcceptEx()API(WinSock的一部分)的作用,该API提供了一些性能改进,但可能与Comodo Firewall冲突。

将Comodo防火墙置于“禁用”模式没有帮助,因为请求可能仍会通过Comodo的网络代码进行。我认为Comodo必须完全卸载才能消除该问题(尽管我没有尝试过)。

如果Apache 2.2遇到类似问题,则应改用Win32DisableAcceptEx指令。

参考文献

http://httpd.apache.org/docs/2.4/mod/core.html引用:

Windows上的默认值为:

AcceptFilter http data

AcceptFilter https data

Window的mpm_winnt解释AcceptFilter来切换AcceptEx()API,并且不支持http协议缓冲。有两个使用Windows AcceptEx()API的值,它们将回收连接之间的网络套接字。数据等待,直到如上所述发送数据为止,并且初始数据缓冲区和网络端点地址都从单个AcceptEx()调用中检索到。connect将使用AcceptEx()API,还检索网络端点地址,但是像没有连接一样,connect选项不会等待初始数据传输。

在Windows上,没有人使用accept()而不是AcceptEx(),并且不会回收连接之间的套接字。这对于驱动程序支持已损坏的网络适配器以及某些虚拟网络提供程序(例如vpn驱动程序,垃圾邮件,病毒或间谍软件筛选器)很有用。

另请参阅:http : //forums.comodo.com/help-for-comodo-antivirus/conflict-with-apache-t260.0.html;msg31636#msg31636


1
我一直在IE10遇到问题,导致Apache2.4(不涉及comodo)挂起,直到服务重新启动为止-并更改.conf以使其修复。感谢您发布此信息。
matt lohkamp

1
这也为我工作。我还在博客上收集了更多参考,因为有关此主题的信息目前非常分散。
Stijn de Witt 2014年

3
为我工作,赢得7 x64。我想知道为什么noneApache中没有默认设置?默认情况下,Apache:P
rustyx 2014年

-1

我在Windows 7 Pro机器上运行Apache 2.4.16,大约2周前我的网站刚刚停止工作。添加此操作可以解决此问题。

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

投反对票,因为您的答案与上述@Eric Fossum的答案完全相同。
hargobind
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.