首页 » 后端 » Apache » 正文

Apache的问题:Asynchronous AcceptEx failed

发布者:站点默认
2011/03/17 浏览数(2,007) 分类:Apache, Linux, Windows Apache的问题:Asynchronous AcceptEx failed已关闭评论

故障描述:

  最近发现服务器运行很慢,不得已试着找了一下原因:服务器安装了诺顿杀毒软件、诺顿干扰了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,访问恢复正常。>

点击返回顶部
  1. 留言
  2. 联系方式