• 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

    有什么不对的地方请大家多多指点,谢谢。
    ---------------------
    作者:kaige_loveu
    来源:CSDN
    原文:https://blog.csdn.net/zwk199024/article/details/44975659
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    2020春软件工程助教工作总结【第十四周】
    【西北师大-20软工】第三次团队作业成绩汇总
    2020春软件工程助教工作总结【第十二周】
    2020春软件工程助教工作总结【第十周】
    将作业提交到班级博客的一些注意事项
    操作系统第6次实验报告:使用信号量解决进程互斥访问
    操作系统第5次实验报告:内存管理
    操作系统第4次实验报告:文件系统
    操作系统第3次实验报告:管道
    操作系统第2次实验报告:创建进程
  • 原文地址:https://www.cnblogs.com/CryOnMyShoulder/p/9813906.html
Copyright © 2020-2023  润新知