2011-02-18 97 views
0

我運行的FastCGI服務器上Nginx的基於Django的網站。該網站通常效果很好。但每隔2-3天,該網站就會遇到未知問題,並停止響應任何請求。跟蹤的Django/FastCGI程序錯誤

穆寧圖表顯示了IO塊中讀取的問題期間每秒&寫入增加500%。

我也寫了一個python腳本記錄以下統計數據每隔一分鐘。

Load Averages 
CPU Usage (user, nice, system, idle, iowait) 
RAM Usage 
Swap Usage 
Number of FastCGI Processes 
RAM Used by FastCGI Processes 

記錄顯示問題期間,FastCGI進程的數量加倍(從正常值10-15到25-30)。而FastCGI進程的內存使用量也增加了一倍(從服務器總數的17%到35%)。內存使用量增加需要使用更多的交換,以便減慢磁盤IO使服務器無響應。

FastCGI的參數我用:

maxspare=10 minspare=5 maxchildren=25 maxrequests=1000 

我想這個問題是由於我的網站的某些部分寫得不好的Python代碼。但我只是不知道如何找出代碼的哪一部分凍結了現有的FastCGI進程並分叉新的實例。

回答

1

你限制孩子到25的號碼,以便當有運行25道工序加工要求任何進一步的會阻止,該網站會出現沒有響應。

就像你有導致此過程阻止無限(或非常長)環聽起來給我。我建議你給FastCGI腳本添加一個空閒超時。這將有望讓網站繼續通過殺死長時間運行的查詢來實現,並且可以通過從進程被終止的位置發送回溯來調試問題。

+0

設置在Django的runfcgi命令超時真可謂是不平凡的,但它是在盒子的好工具。 – 2013-02-04 01:09:59