昨天收到一个客户方电话求助,说是内网网站访问慢,log里刷新的日志为:[warn] (OS 64)指定的网络名不再可用. : winnt_accept: Asynchronous AcceptEx failed.
客户现场环境为windows2003操作系统,apache版本2.2.24。
经在apache2.2官方文档上面查找windows apache使用的多道处理模块mpm_winnt_module下有一个对应的指令Win32DisableAcceptEx 指令,可以用来处理这个问题。
AcceptEx()是Microsoft WinSock v2 API,accept()在某些情况下,与使用BSD样式API 相比,它提供了一些性能改进 。一些流行的Windows产品(通常是病毒扫描或虚拟专用网络包)存在干扰正常操作的错误 AcceptEx()。如果遇到错误情况,例如:
[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
你应该使用这个指令来禁用它 AcceptEx()。
官方链接地址:http://httpd.apache.org/docs/2.2/mod/mpm_winnt.html
具体处理办法为:
在httpd.conf文件中添加 Win32DisableAcceptEx 标记,如下:
<IfModule mpm_winnt.c>
ThreadsPerChild 150
MaxRequestsPerChild 10000
Win32DisableAcceptEx
</IfModule>
或者
在conf/extra中编辑httpd-mpm.conf
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxRequestsPerChild 10000
Win32DisableAcceptEx
</IfModule>
重启apache即可,问题解决。