apache 指定的网络名不再可用(winnt_accept: Asynchronous AcceptEx failed)

1、问题现象:

访问apache静态的http内容,有时候比较慢,有时候“找不到网页”404错误;

另外在error.log里也报错:

[Mon May 26 10:11:47 2008] [warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.


2、问题实例项目:天气预报15天查询(http://15tianqi.cn/)


3、问题分析:

Apache MPM winnt多路处理模块(MPM)是Windows NT上的默认值。它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。

AcceptEx()是一个微软的WinSock2 API ,通过使用BSD风格的accept() API提供了性能改善。一些流行的Windows产品,比如防病毒软件或虚拟专用网络软件,会干扰AcceptEx()的正确操作。如果你遇到类似于如下的错误:

[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.

你就需要使用这个指令来禁止使用AcceptEx() 。


4、解决办法

在httpd.conf文件中添加 Win32DisableAcceptEx 标记,如下:

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

这样可以允许并发连接更大一些。同时性能上也不会有明显的降低。

如果Apache的error.log还是出现大量的:Sat Dec 24 17:21:28 2006] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed。可以参考下列配置:

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

勾.

   2.控制面版->windows防火墙->高级标签->本地连接设置->服务的标签里勾选安全Web服务器(HTTPS)。

   3.然后退出Apache,再打开启动就可以了 ,一开始我没有退出,直接在那重启,就是不可以,一定要先停止,在开启即可


5、总结

本次故障[warn] (OS 64)指定的网络名不再可用。的解决办法主要是关闭AcceptEx而其他两个指令都是可选,经过笔者测试关闭另外两个指令对性能没有影响(好像这两个指令在win下是不能用的)。


6、补充说明:

一般,这样设置基本就能搞定,但是我碰到的情况,就是想上面那样关闭AcceptEx,也会出现类似问题,Apache还是不能正常运作,error.log 出项了大量的:Sat Dec 24 17:21:28 2006] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed.。又找了一下,发现了如下的一种解决办法,我试了试,果然可以,而且在多台服务器上试过,只要出现了AcceptEx 的问题,就能解决,具体设置为: 1、网上邻居-;本地连接-;属性-;internet协议(TCP/IP)-;属性-;高级-;wins标签-;去掉启用LMhosts查询前的勾. 2、控制面版-;windows防火墙-;高级标签-;本地连接设置-;服务的标签里勾选安全Web服务器(HTTPS)。 3、然后退出Apache,再打开启动就可以了 ,一开始我没有退出,直接在那重启,就是不可以,一定要先停止,在开启即可。

你可能感兴趣的:(apache错误分析)