Apache error.log [warn](OS 64)指定的网络名不再可用。winnt_accept: Asynchronous AcceptEx failed.

        两年前公司给客户做过一个门户网站,近些日子客户多次向我反映,网站打开网页特别慢,经常打不开网站,就是打开也要7、8分钟才能打开。后来重启服务,之后没过半小时,又是打不开网站了。

        我们用的是Apache2.2,进入 /Apache2.2/logs/ ,发现有好多error.log,打开最近日期的一个,看到日志输出了许多的“[warn](OS 64)指定的网络名不再可用。winnt_accept: Asynchronous AcceptEx failed.” 。在网上查了许多资料,解决方法简单地说就是让Apache启动时关闭AcceptEx(),我先把解决方案说一下,然后在贴上一些官方的解释。我想大家也和我一样,遇到这样的问题想最先试试解决方法。

        

        打开配置文件 / Apache2.2 / conf / httpd.conf ,找到 #Include conf/extra/httpd-mpm.conf ,然后去掉前面的#。

# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf
         打开配置文件 / Apache2.2 / conf / extra / httpd-mpm.conf ,找到<IfModule mpm_winnt_module>(有的版本是<IfModule mpm_winnt.c>),

# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum  number of requests a server process serves
<IfModule mpm_winnt_module>
    ThreadsPerChild      1000
    MaxRequestsPerChild    10000
    Win32DisableAcceptEx    #加入这行
</IfModule>
         Win32DisableAcceptEx 是新加入的。


        重新启动Apache,error.log不会再出现“[warn](OS 64)指定的网络名不再可用。winnt_accept: Asynchronous AcceptEx failed.”,而且页面访问速度变得很快了。


下面是就这个问题的Apache官方的解释:

http://httpd.apache.org/docs/2.0/mod/mpm_winnt.html#win32disableacceptex

=========================================================================================

Win32DisableAcceptEx Directive

Description: Use accept() rather than AcceptEx() to accept network connections
Syntax: Win32DisableAcceptEx
Default: AcceptEx() is enabled by default. Use this directive to disable use of AcceptEx()
Context: server config
Status: MPM
Module: mpm_winnt
Compatibility: Available in Version 2.0.49 and later

AcceptEx() is a Microsoft WinSock v2 API that provides some performance improvements over the use of the BSD style accept() API in certain circumstances. Some popular Windows products, typically virus scanning or virtual private network packages, have bugs that interfere with the proper operation of AcceptEx(). If you encounter an error condition like:

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

you should use this directive to disable the use of AcceptEx().

=========================================================================================

大概翻译一下:

AcceptEx()默认是启用的;相关配置在mpm_winnt模块中,在2.0.49以及后面的版本就开始用了。

AcceptEx()是一个在某些情况下提高网络效率的微软的winsock v2的API。一些流行的Windows产品,尤其是病毒扫描及类似的软件会妨碍AcceptEx()的正确操作。如果你在error日志中遇到下面的输出:

[warn](OS 64)指定的网络名不再可用。winnt_accept: Asynchronous AcceptEx failed.
你应该关闭掉AcceptEx()。


//

下面是我在查阅网上资料时看到的,他在改过配置后,发现内存猛增,一直到最后crash的情况。经过他的实验发现是,配置ThreadsPerChild 的数量与本身服务器的内存大小有一定的平衡关系。我在这里贴出他写的文章的链接,遇到类似问题的可以读一下。(尊重原创)

http://blog.csdn.net/lcj8/article/details/5767889


有什么不对的地方请大家多多指点,谢谢。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值