2015年12月14日 星期一

解決 Apache 伺服器於微軟 Windows 伺服器中運行時,會不定期中止服務的問題。

問題


安裝於微軟 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 伺服器服務,就可修正此問題。

沒有留言:

張貼留言