故障描述:
最近发现服务器运行很慢,不得已试着找了一下原因:服务器安装了诺顿杀毒软件、诺顿干扰了Apache的AcceptEx()的正确操作、于是apache拼命在日志里报下边的的错误。
[warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed.
名词解释:
AcceptEx()是一个微软的WinSock2 API ,通过使用BSD风格的accept() API提供了性能改善。一些流行的Windows产品,比如防病毒软件或虚拟专用网络软件,会干扰AcceptEx()的正确操作。如果你遇到类似于如下的错误,你就需要使用Win32DisableAcceptEx指令来禁止使用AcceptEx() 。Win32DisableAcceptEx,这个功能,只有 2.0.49 版以后的才可以使用。
[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
解决办法:
在httpd.conf文件中添加Win32DisableAcceptEx标记。代码如下:
</div> <div id="_mcePaste"><IfModule mpm_winnt.c></div> <div id="_mcePaste">ThreadsPerChild 150</div> <div id="_mcePaste">MaxRequestsPerChild 10000</div> <div id="_mcePaste">Win32DisableAcceptEx</div> <div id="_mcePaste"></IfModule></div> <div id="_mcePaste">
如果Apache的error.log还是出现大量的:Sat Dec 24 17:21:28 2006] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed。可以参考下列配置:
第一步:网上邻居->本地连接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉启用LMhosts查询前的勾.
第二步:控制面版->windows防火墙->高级标签->本地连接设置->服务的标签里勾选安全Web服务器(HTTPS)。
第三步:重启Apache。
可能会遇到的问题:
内容占用很大:
ThreadsPerChild的意思是系统启动时默认启动的等待线程数,用来等待处理客户的请求。在使用AcceptEx时内存增长不明显并且增长后可以回降,用户来了请求线程分配了一些资源,此时内存增长,但用户访问完成后,这些资源都释放了。但禁用了AcceptEx后,由于apache每个线程需要处理网络事件,因此每个线程的资源需要就多了,并且处理完一个用户的请求后,有些资源不释放。
<完。以上内容来自网络文章拼接而成。>
故障描述:
最近发现服务器运行很慢,不得已试着找了一下原因:服务器安装了诺顿杀毒软件、诺顿干扰了Apache的AcceptEx()的正确操作、于是apache拼命在日志里报下边的的错误。
[warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed.
名词解释:
AcceptEx()是一个微软的WinSock2 API ,通过使用BSD风格的accept() API提供了性能改善。一些流行的Windows产品,比如防病毒软件或虚拟专用网络软件,会干扰AcceptEx()的正确操作。如果你遇到类似于如下的错误,你就需要使用Win32DisableAcceptEx指令来禁止使用AcceptEx() 。Win32DisableAcceptEx,这个功能,只有 2.0.49 版以后的才可以使用。
[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
解决办法:
在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。可以参考下列配置:
第一步:网上邻居->本地连接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉启用LMhosts查询前的勾.
第二步:控制面版->windows防火墙->高级标签->本地连接设置->服务的标签里勾选安全Web服务器(HTTPS)。
第三步:重启Apache。
可能会遇到的问题:
内容占用很大:
ThreadsPerChild的意思是系统启动时默认启动的等待线程数,用来等待处理客户的请求。在使用AcceptEx时内存增长不明显并且增长后可以回降,用户来了请求线程分配了一些资源,此时内存增长,但用户访问完成后,这些资源都释放了。但禁用了AcceptEx后,由于apache每个线程需要处理网络事件,因此每个线程的资源需要就多了,并且处理完一个用户的请求后,有些资源不释放。
<完。以上内容来自网络文章拼接而成。另外,最终没有采用这个办法,速度依旧很慢,于是放弃Apache改用了IIS的FastCGI然后用了php5.3.0,访问恢复正常。>