Windows 上的 Apache 2.4 响应缓慢,在提供某些动态页面时挂起

Tom*_*ski 30 windows windows-7 apache-http-server comodo-firewall

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

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

使用 Firefox/Chrome,Apache对某些 URL 的响应。在任何给定的 URL 上,大约有 20% 的时间出现缓慢。当它确实发生时,有 5 秒的延迟,在此期间 Firefox 会显示“正在等待...”状态。

使用 Internet Explorer 9,Apache 只是挂起并停止服务任何请求(使用任何浏览器),直到它重新启动。

  • 这似乎只发生在动态 (PHP) 请求中,但不是全部。事实上,它只发生在一个特定的站点上。同一台机器上的其他基于 PHP 的站点工作正常。
  • 有问题的站点由大量子域 (VirtualHosts) 组成,可能重要也可能不重要。
  • 禁用 Windows 防火墙和 Comodo 防火墙无济于事。
  • “繁忙”页面的问题似乎更频繁(对 IFRAMES 等的额外请求)

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

Eri*_*sum 35

Thomasz 的回答


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

AcceptFilter http none
AcceptFilter https none
Run Code Online (Sandbox Code Playgroud)

在 Windows 上,这具有禁用 AcceptEx() API(WinSock 的一部分)的效果,它提供了一些性能改进,但可能与 Comodo 防火墙冲突。

将 Comodo Firewall 置于“禁用”模式无济于事,因为请求可能仍然通过 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 并在连接之间回收网络套接字。data 一直等到数据按照上面记录的方式传输,并且初始数据缓冲区和网络端点地址都从单个 AcceptEx() 调用中检索。connect 将使用 AcceptEx() API,也检索网络端点地址,但与 none 一样,connect 选项不等待初始数据传输。

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

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

  • 为我工作,Win 7 x64。我想知道为什么 `none` 不是 Apache 中的默认设置?Apache 中默认禁用大多数其他“创新”功能:P (3认同)