您的位置:首页 > 理论基础 > 计算机网络

Apache 指定的网络名不再可用 winnt_accept: Asynchronous AcceptEx failed 的解决办法

2015-11-25 23:45 483 查看
现象:

[Sat Mar 03 13:29:49 2007] [warn] (OS 64)指定的网络名不再可用。 :winnt_accept: Asynchronous AcceptEx failed.

出现这个故障时硬盘灯狂闪,内存占用极大,访问极慢。

分析:

AcceptEx() 是 Microsoft WinSock v2 API 一组提升网路效率 API 中的指令。而且在 Windows上似乎蛮有可能出问题的。

注:可能為了效能还是预设為开啟 AcceptEx()

解决:

如果无预警的发生问题,我猜可能是 Windows Update 或是防火墙、防毒软体更新了某些网路原件,造成 MicrosoftWinSock v2 API 动作不正常,这时可以把这个功能先给关掉。

依照官方说明 , Win32DisableAcceptEx 这个功能,只有 2.0.49 版以后的才可以使用,所以我猜测AcceptEx() 这个指令大概也是 2.0.49 才会开始支援(目前最新的就是 2.0.49)。

关掉 AcceptEx() 的方式只要在 httpd.conf 找到 区段,加入 Win32DisableAcceptEx就可以了。

Win32DisableAcceptEx #加入这一行

ThreadsPerChild 250

MaxRequestsPerChild 0

疑问:如果把AcceptEx()这个关掉了,是否会影响访问的速度;如果影响速度,又怎样不让速度慢下来。

解决办法如下:

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

<IfModule mpm_winnt.c>

ThreadsPerChild 550

MaxRequestsPerChild 10000

Win32DisableAcceptEx

</IfModule>

设置ThreadsPerChild为 550(可能占内存会达到2G,可按你机器的实际情况配置),这样可以允许并发连接更大一些。同时性能上也不会有明显的降低。

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

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

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

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

停止Apache,再启动。确实新设置起作用了:

[notice] Disabled use of AcceptEx() WinSock2 API

[notice] mod_python: Creating 8 session mutexes based on 0 maxprocesses and 1000 max threads.

[notice] Child 2380: Child process is running

[notice] Child 2380: Acquired the start mutex.

[notice] Child 2380: Starting 1000 worker threads.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: