Parent: child process exited with status 3221225477 -- Restarting.

53 views
Skip to first unread message

管理员

unread,
Nov 26, 2007, 6:36:50 AM11/26/07
to 一起赚·流量营销专家
文章引用地址:http://www.neo.com.tw/archives/000223.html

我電腦上的 Apache 版本是 2.0.49,這陣子只要一重機開機,有時 CPU 的資源就被 Apache 給佔走了,而且硬碟的燈一直在
閃。

今天因為開始要撰寫 WaShop 專案了,所以大概看了 Log 開始發生問題的區段是:

[Tue Jun 15 12:03:15 2004] [error] (OS 10038)嘗試操作的對象不是通訊端。 : Child
1556: Encountered too many errors accepting client connections.
Possible causes: dynamic address renewal, or incompatible VPN or
firewall software. Try using the Win32DisableAcceptEx directive.

依照上面的訊息,關掉防火牆跟防毒軟體還是一樣的狀況,後來依照他的提示要使用 Win32DisableAcceptEx 指令。

所以只要看到 Log 有寫 Win32DisableAcceptEx 或 AcceptEx failed 之類的字眼,就該把
AcceptEx() 關掉了,而關掉的方法就是在 httpd.conf 內加入 Win32DisableAcceptEx 。

Win32DisableAcceptEx 顧名思義就是在 Windows 下關掉 AcceptEx() 功能的指令。至於
AcceptEx() 這個東西是什麼,可以參考 Apache 的官方網頁:

http://httpd.apache.org/docs-2.0/mod/mpm_winnt.html#win32disableacceptex

原文如下:
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() 是 Microsoft WinSock v2 API 一組提升網路效率 API 中的指令。而且在
Windows 上似乎蠻有可能出問題的。

註:可能為了效能還是預設為開啟 AcceptEx()

如果無預警的發生問題,我猜可能是 Windows Update 或是防火牆、防毒軟體更新了某些網路原件,造成 Microsoft
WinSock v2 API 動作不正常,這時可以把這個功能先給關掉。

依照官方說明 , Win32DisableAcceptEx 這個功能,只有 2.0.49 版以後的才可以使用,所以我猜測
AcceptEx() 這個指令大概也是 2.0.49 才會開始支援(目前最新的就是 2.0.49)。

關掉 AcceptEx() 的方式只要在 httpd.conf 找到 <IfModule mpm_winnt.c> 區段,加入
Win32DisableAcceptEx 就可以了。

<IfModule mpm_winnt.c>
Win32DisableAcceptEx #加入這一行
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>

然後重新啟動 Apache ,動作果然都正常了。


文章引用地址:http://www.csjh.tcc.edu.tw/phpbbinf/viewtopic.php?p=22344

EnableMMAP off
EnableSendfile off
Win32DisableAcceptEx

管理员

unread,
Nov 26, 2007, 6:44:30 AM11/26/07
to 一起赚·流量营销专家
APACHE 官方文档:

Win32DisableAcceptEx 指令
说明 使用accept()代替AcceptEx()接受网络链接
语法 Win32DisableAcceptEx
默认值 AcceptEx()是默认的,使用这个指令将禁用它。
作用域 server config
状态 MPM
模块 mpm_winnt
兼容性 仅在 Apache 2.0.49 及以后的版本中可用

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() 。
Reply all
Reply to author
Forward
0 new messages