AH00341: winnt_accept: Asynchronous AcceptEx failed.解决方案

这个问题困扰了我很久,一直以为是win2003与apache的兼容问题,正好最近好奇心比较重,简单在网上学习了一下。   

当你配置apache 访问网页一直在加载,似乎被挂起. 转圈需要3分钟多钟, 最终显示无法访问. 或者超时.
错误日志中有如下提示:

[Thu May 30 10:33:31.148293 2013] [mpm_winnt:warn] [pid 8072:tid 1756] (OS 64)指定的网络名不再可用。  : AH00341: winnt_accept: Asynchronous AcceptEx failed.


已经可以解决了, 我翻阅了xampp官方的配置文档, 发现如下信息:
# XAMPP: We disable operating system specific optimizations for a listening 
# socket by the http protocol here. IE 64 bit make problems without this.
理解为关闭系统监听, 浏览器监听等, 最后一句说明ie 64位可能不受影响.  win8 64位系统上的ie事实上一个进程, 这句话还需要分析测试.


 apachelounge也有人提到这个问题:
When you have hangs, slow traffic and/or when having in your log entries like Asynchronous AcceptEx failed. You can try the following settings:

解决方案, 在配置文件中加入:
AcceptFilter http none 
AcceptFilter https none 
EnableSendfile Off  
EnableMMAP off

最近从虚拟主机转到了VPS之后自由了许多,但是也多了不少问题。在弄好了MySQL之后Apache又出了问题,具体表现是网站每过一定时间就无法打开,静态页面也无法访问。重启Apache后恢复,确认为Apache问题。在查看error log之后发现有这么一行:“(OS 64)指定的网络名不再可用。  : AH00341: winnt_accept: Asynchronous AcceptEx failed.”

翻阅了不少网络文章,大多数表示需要使用Win32DisableAcceptEx,但reizhi在尝试后未果。将全部调试步骤罗列如下,希望能够有所帮助。

系统环境:Windows  2003r2

Apache版本:2.4

1.打开httpd.conf,添加以下代码:

<IfModule mpm_winnt.c>
ThreadsPerChild 1000
MaxRequestsPerChild   10000
Win32DisableAcceptEx
</IfModule>

2.将ThreadsPerChild选项从默认的250或者更多,降至170以下

ThreadsPerChild 170

3.

网上邻居->本地连接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉启用LMhosts查询前的勾。

控制面版->windows防火墙->高级标签->本地连接设置->服务的标签里勾选安全Web服务器(HTTPS)。 
4.在httpd.conf中添加以下代码

AcceptFilter http none 
AcceptFilter https none 
EnableSendfile Off  
EnableMMAP off

reizhi最终使用方法4解决问题,已正常运行数天。

相关推荐