2011-04-04 60 views
2

我正在運行一個相當典型的LAMP堆棧,通過mod_fcgid運行PHP。考慮到接收到的流量,我認爲服務器處於「高負載」狀態。mod_fcgid + PHP + apache鎖定

存在間歇性問題,Apache在訪問依賴於PHP的站點時報告所有連接處於「發送內容」狀態(監視器上的「W」)。

有沒有PHP錯誤可以說,它就好像PHP實際上並沒有在這些「鎖定」期間被調用。然而,在Apache的網站日誌我看到以下內容:

(103)Software caused connection abort: mod_fcgid: ap_pass_brigade failed in handle_request function 
[warn] mod_fcgid: can't apply process slot for /var/www/cgi-bin/php.fcgi 

在這段時間裏我仍然可以不依賴於PHP訪問的網站,比如apache的地位和HTML只虛擬主機(即唐沒有包含PHP處理程序)。

php.fcgi腳本有PHP_FCGI_MAX_REQUESTS = 500設置,因爲我已經閱讀了PHP運行在CGI模式下的競態條件問題。 fcgid.conf也有MaxProcessCount = 15集。

有沒有其他人遇到這個錯誤,如果有的話,它如何解決?

回答

2

我設法解決這一個我自己。

爲了解決這個問題,添加在過程掛起的FastCGI配置更嚴格的檢查,並降低你的PHP實例的生命週期:

IPCConnectTimeout 20 
ProcessLifeTime 120 
IdleTimeout 60 
IdleScanInterval 30 
MaxRequestsPerProcess 499 
MaxProcessCount 100 

根據您的要求,這能滿足配置良好的服務器每小時點擊量超過5萬次。

你會發現錄製的失效/「殭屍」PHP進程的數量顯着增加。然而,這很好,因爲以前這些流程只會變得沒有響應,FastCGI管理器會繼續向它們發送請求!

我還建議從您的php.fcgi腳本中刪除所有覆蓋指令,因爲這可能會導致您的系統出現問題。嘗試儘可能地從Apache中的主要FastCGI配置進行管理。

0

我們去用的Nginx + http://php-fpm.org/

嘗試 「使用strace -p」。

我也看到當一些PHP軟件試圖從同一服務器請求文件運行它的(get_file_contents(的「http://本地主機...」))拘留所發生

+0

既然問了這個問題,我也跳到了nginx和php-fpm,並沒有再次出現這種問題。 – plasmid87 2012-06-20 09:38:23