天天看點

Apache服務挂起Asynchronous AcceptEx failed.

最近在使用PHP5.6+Apache2.4,搭建開發環境;在實際的開發過程中發現http請求一緻處于挂起狀态,于是重新開機(net start/stop)Apache2.4服務,然後再通路問題得到了解決,但是過一會,平凡的打開頁面又出現問題,通過檢視web伺服器的日志,發現報很多"指定的網絡名不再可用"的錯誤:

[Thu Nov 20 14:07:43.151780 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。  : AH00341: winnt_accept: Asynchronous AcceptEx failed.

[Thu Nov 20 14:07:43.152781 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。  : AH00341: winnt_accept: Asynchronous AcceptEx failed.

[Thu Nov 20 14:07:43.152781 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。  : AH00341: winnt_accept: Asynchronous AcceptEx failed.

[Thu Nov 20 14:07:43.152781 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。  : AH00341: winnt_accept: Asynchronous AcceptEx failed.

[Thu Nov 20 14:07:43.152781 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。  : AH00341: winnt_accept: Asynchronous AcceptEx failed.

在網上找各種資料,都是說在httpd.conf檔案中添加 Win32DisableAcceptEx 标記:

<IfModule mpm_winnt.c>

    ThreadsPerChild 150

    MaxRequestsPerChild 10000

    Win32DisableAcceptEx

</IfModule>

配置之後問題依然未得到解決,最終檢視Apache的手冊(PS:檢視最新的Apache2.4的手冊),看到官方的如下解釋:

The default values on Windows are:

AcceptFilter http data

AcceptFilter https data

Window's mpm_winnt interprets the AcceptFilter to toggle the AcceptEx() API, and does not support http protocol buffering. There are two values which utilize the Windows AcceptEx() API and will recycle network sockets between connections. data waits until data has been transmitted as documented above, and the initial data buffer and network endpoint addresses are all retrieved from the single AcceptEx() invocation. connect will use the AcceptEx() API, also retrieve the network endpoint addresses, but like none the connect option does not wait for the initial data transmission.

On Windows, none uses accept() rather than AcceptEx() and will not recycle sockets between connections. This is useful for network adapters with broken driver support, as well as some virtual network providers such as vpn drivers, or spam, virus or spyware filters.

在配置檔案中添加如下資訊:

AcceptFilter http none

AcceptFilter https none

最終解決問題