2009-02-04

解决Apache2.2的Encountered too many errors accepting,client connections. Possible causes: dynamic address renewal, or,incompatible VPN or firewall software.问题

我的机器是windows server 2003 主要是用作开发用,除了apache 还装了很多其
他软件;

首先一次重新启动后遇到了这个问题:
taskmanager 里有两个httpd进程,其中一个占用cpu 很高 于是去查看event
viewer 没有看到问
题...........
去看error.log 果然问题出在这里,里面有好多个这样的错误,看来是陷入死循环
了。


error] (OS 10038) : Child 3356: Encountered too many errors accepting
client connections. Possible causes: dynamic address renewal, or
incompatible VPN or firewall software. Try using the
Win32DisableAcceptEx directive.


于是我很开心的去网上查解决办法,去了几个国内论坛也去了几个国外的论坛,最
先找到的解决办法都是:


解决方法:
编辑httpd.conf


在文件尾加入下面一行


Win32DisableAcceptEx


重启apache


可是我的问题就是还没有解决,以出现了新的问题


Fri Jun 01 10:15:27 2007] [notice] Apache/2.2.3 (Win32) PHP/5.1.4
configured -- resuming normal operations
[Fri Jun 01 10:15:27 2007] [notice] Server built: Jul 27 2006 16:49:49
[Fri Jun 01 10:15:27 2007] [notice] Parent: Created child process 3344
[Fri Jun 01 10:15:27 2007] [notice] Disabled use of AcceptEx()
WinSock2 API
[Fri Jun 01 10:15:29 2007] [notice] Child 3344: Child process is
running
[Fri Jun 01 10:15:29 2007] [notice] Child 3344: Acquired the start
mutex.
[Fri Jun 01 10:15:29 2007] [notice] Child 3344: Starting 250 worker
threads.
[Fri Jun 01 10:15:29 2007] [notice] Child 3344: Listening on port 80.
[Fri Jun 01 10:15:29 2007] [error] (OS 10038)An operation was
attempted on something that is not a socket. : Too many errors in
select loop. Child process exiting.
[Fri Jun 01 10:15:29 2007] [notice] Child 3344: Exit event signaled.
Child process is ending.
[Fri Jun 01 10:15:30 2007] [notice] Child 3344: Released the start
mutex
[Fri Jun 01 10:15:30 2007] [notice] Child 3344: Waiting for 250 worker
threads to exit.
[Fri Jun 01 10:15:30 2007] [notice] Child 3344: All worker threads
have exited.
[Fri Jun 01 10:15:30 2007] [notice] Child 3344: Child process is
exiting
[Fri Jun 01 10:15:30 2007] [notice] Parent: child process exited with
status 0 -- Restarting.
[Fri Jun 01 10:15:31 2007] [notice] Apache/2.2.3 (Win32) PHP/5.1.4
configured -- resuming normal operations
[Fri Jun 01 10:15:31 2007] [notice] Server built: Jul 27 2006 16:49:49
[Fri Jun 01 10:15:31 2007] [notice] Parent: Created child process 288
[Fri Jun 01 10:15:31 2007] [notice] Disabled use of AcceptEx()
WinSock2 API
[Fri Jun 01 10:15:32 2007] [notice] Child 288: Child process is
running
[Fri Jun 01 10:15:32 2007] [notice] Child 288: Acquired the start
mutex.
[Fri Jun 01 10:15:32 2007] [notice] Child 288: Starting 250 worker
threads.
[Fri Jun 01 10:15:32 2007] [notice] Child 288: Listening on port 80.
[Fri Jun 01 10:15:32 2007] [error] (OS 10038)An operation was
attempted on something that is not a socket. : Too many errors in
select loop. Child process exiting.


就这样的不停重复。。。。。。。。。。。
于是继续找。。同时在http server 的文档上查了一下Win32DisableAcceptEx 这
个命令
同时找到下面两个可以说是建议吧:
一、Udpsocket Wsa Error = 10038
首先这也是个10038错误,和winsock相关,我觉得可能有用就看了一下
问题是这样陈述的:
HI,


cAN ANYBODY HELP IN THE FOLLOWING ERROR:


I STARTED MY SYS TODAY , AND IT SHOWED ME THE ERROR " UDPSOCKET" AND
THEN IN ANOTHER DIALOGBOX IT SAID " WSA ERROR = 10038"


NOW I M UNABLE TO CONNECT TO THE NETWORKING MACHINES AND NOR CAN I
CONNECT TO THE INTERNET.


CAN ANYBODY HELP IN THIS REGARD ? WD REALLY APPRECIATE THAT .


IT'S PRETTY URGENT.


REGARDS
ARUN


mlegg 给出了解决办法:
If you have updated Windows and have SP2 (you should by now)
Go to the Start button > to the Run box > type cmd and the command
window opens


now type: netsh winsock reset


this will repair your corrupted Winsock


if you do not have SP2 yet for some reason, then read this page from
MS on how to repair your Winsock


Afterwards go to Windows Updates and get everything you do not have
yet. There has been a lot of updates and patches over the last few
months. They come out the 2nd Tuesday of every month, but this month
they were released early to fix a critical patch.


同时我也在同时在http server 的文档上看到Win32DisableAcceptEx (使用
accept()代替AcceptEx()接
受网络链接)这个命令,有一个关于AcceptEx()的介绍:AcceptEx()是一个微软的
WinSock2 API ,通过使用BSD风格的
accept() API提供了性能改善。一些流行的Windows产品,比如防病毒软件或虚拟
专用网络软件,会干扰AcceptEx()的正确操作。
如果你遇到类似于如下的错误:
[error] (730038)An operation was attempted on something that is not a
socket.: winnt_accept: AcceptEx failed. Attempting to recover.


你就需要使用这个指令来禁止使用AcceptEx() 。


于是我使用了netsh winsock reset命令也把Symantec AntiVirus 卸载了
重新启动,问题解决


后记:
问题虽然解决了,但是从头到尾还没有完全搞清楚, 还有两个疑问:(1)还是不
知道问题到底是怎么产生的,我以前就一真用Symantec
AntiVirus,如果是因为它,为什么到现在才产生这个问题,如果说是由于更新病
毒库的原因,我自己也不能说服我自己相信这个理由(2)如果是由于
系统升级产生的问题那么为什么会产生这个问题?呵呵,饿了,先去吃饭,回来再
解决之两个疑问


我又重新把Symantec AntiVirus装起,呀,没有问题,不知道问题是怎么产生的了,就
是Symantec AntiVirus还没有更新
病毒库呢,哈,学校的网络有点差,毕竟是教育网,怎样才让访问国外的网站速度快一
点呢?....


总这可以确定是winsock2 corrupted 了要用 netsh winsock reset 恢复而不是用
Win32DisableAcceptEx 把 acceptex() 关掉

没有评论: