問題
安裝於微軟 Windows 2008、2012 伺服器中的 Apache 伺服器,在運作一段時間之後,伺服器就會暫停服務。此時如果查詢 Apache error log 時,會出現下列的錯誤訊息:
[warn] (OS 64)The specified network name is no longer available.: winnt_accept: Asynchronous AcceptEx failed.
說明
這個問題可能是 AcceptEx( ) 所導致的問題。AcceptEx( ) 是微軟的 WinSock v2 API,它可以在特定的情況下,改善使用 BSD 風格的 accept( ) API 的效能。不過某些常見的 Windows 軟體或產品,如防毒軟體或虛擬私人網路 (VPN) 封包,可能會有錯誤干擾 AcceptEx( ) 的正常運作。所以為了避免這種情況發生,可先將 AcceptEx( ) 關閉。
解決方式
首先請開啟 Apache 伺服器中的 httpd.conf 檔案,接下來請查詢 Apache 伺服器的版本,並依照版本號進行以下的修改:
版本是 2.0.49
請找到 <IfModule mpm_winnt.c> 區段,加入 Win32DisableAcceptEx 就可以了。
<IfModule mpm_winnt.c>
Win32DisableAcceptEx #加入這一行
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>
版本是 2.2.X 或更新的版本
加入以下四行指令:AcceptFilter https none
AcceptFilter http none
EnableSendfile Off
EnableMMAP off
修改完成後,請先儲存 httpd.conf 檔案,接著重新啟動 Apache 伺服器服務,就可修正此問題。
沒有留言:
張貼留言