Window下APACHE的Win32DisableAcceptEx的问题

10 views
Skip to first unread message

管理员

unread,
Nov 28, 2007, 7:31:09 AM11/28/07
to 一起赚·流量营销专家
Window下APACHE的Win32DisableAcceptEx的问题

我用的是apache2.0.55+win2003,在使用了一段时间后,出现如下问题:


apache正常启动,但是访问localhost或虚拟主机时,出现不能访问的情况,不是找不到服务器,是一直在显示【正在打开网页...】,然后就
是长时间空白,Apache不工作。





【出现的问题:】


我就重装系统,在装好window2003server后,进行自动更新完毕后,安装apache2.0.55后,apache能正常启动,就
出现上面的问题,然后卸掉装2.0.59、2.2.2、2.2.3都是这样的问题,没有办法,就format c盘重装
window2003server,没有进行自动更新,安装apache2.0.55时,apache正常工作了,一段时间后就出现了这种问题,期
间,win2003又进行了【自动更新】。系统就出现了这样的问题。





【现象:】


apache正常启动,但是访问localhost或虚拟主机时,出现不能访问的情况,不是找不到服务器,是一直在显示【正在打开网
页...】,然后就是长时间空白。apache的error.log,里面出现大量的这样的错误信息:


[Wed Nov 01 09:45:34 2006] [error] (OS 10038)在一个非套接字上尝试了一个操作。 : Child
816: Encountered too many errors accepting client connections.
Possible causes: dynamic address renewal, or incompatible VPN or
firewall software. Try using the Win32DisableAcceptEx directive.





【问题的原因:】


在网上查了一下,发现很多人碰到这个情况,原因是Apache 的AcceptEx在window下会出现这种问题,只在
APAche2.0.49以上版本会有这中问题。


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


一般的解决办法是关闭 AcceptEx()"。也就是说,可能是 Windows Update 或是防火墙、防毒软件更新了某些网络原件,造成
Microsoft WinSock v2 API 动作不正常,会干扰WinSock2 API,就会影响AcceptEx()的正确操作,就可能出
现上面所出现的问题。


但是关闭会影响Apache的性能。需要自己权衡利弊。因此如果没有什么错误发生,最好还是不要随便关闭这个功能比较好吧。





【解决办法:】


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


<IfModule mpm_winnt.c>


ThreadsPerChild 1000


MaxRequestsPerChild 10000


Win32DisableAcceptEx


</IfModule>


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





一般,这样设置基本就能搞定,但是我碰到的情况,就是想上面那样关闭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,再打开启动就可以了 ,一开始我没有退出,直接在那重启,就是不可以,一定要先停止,在开启即可。
Reply all
Reply to author
Forward
0 new messages