2012-12-06 54 views
2

我使用的是Windows Server 2008中的Apache 2.2的Python 2.7和Django的是FCGI服務器Django的Apache的與FCGI - 高負荷下的500內部服務器錯誤

FCGI服務器開始作爲的服務與SRVANY:


python c:\amebas_site\amoeba\manage.py runfcgi host=127.0.0.1 port=8881 daemonize=True method=threaded outlog=c:\amebas_site\logs\access.log errlog=c:\amebas_site\logs\error.log maxchildren=100 maxspare=90 minspare=50 maxrequests=10 debug=True

我嘗試了不同的maxspare,minspare,maxrequests和maxchildren值,但沒有任何幫助。在高負載下,我總是得到「500服務器錯誤」。

Apache的配置:當有5-6個用戶在線,沒有錯誤

FastCGIExternalServer c:\amebas_site\fcgi.hook -host 127.0.0.1:8881

RewriteEngine On 
... 
RewriteCond ${REQUEST_FILENAME} !-f 
RewriteRule ^/(.*)$ /fcgi.hook/$1 [QSA,L] 

我的Django的網站工作良好。 但是當我做壓力測試(通過loadimpact.com 50個虛擬用戶),該網站顯示「500內部服務器錯誤」頁面,我在Apache日誌得到一個錯誤信息:

[Thu Dec 06 16:29:48 2012] [error] [client 54.246.71.7] (OS 10054)An existing connection was forcibly closed by the remote host. : FastCGI: comm with server "C:/amebas_site/fcgi.hook" aborted: read failed [Thu Dec 06 16:29:48 2012] [error] [client 54.246.71.7] FastCGI: incomplete headers (0 bytes) received from server "C:/amebas_site/fcgi.hook"

但有注意到Django日誌。我怎樣才能調試這個問題並擺脫它?

回答

0

瞧,你已經maxchildren = 100 1.如果您的請求更多的則是1-2seconds(在調試可能的),那麼你的服務器無法處理所有50個連接 2.如果您有靜態文件,它的通過Django的服務 - 那麼它也使用其他連接

解決方法:你可以分析日誌和計算您在例如5秒

+0

靜態文件是由Apache的服務多少請求。當有50個虛擬用戶時,每秒有超過20個請求。 – user1882347

+0

我會嘗試更多的子線程,但我仍然想知道FCGI會發生什麼。如何確定它是否在處理請求的某個地方失敗或者超時?在測試過程中頁面加載時間也會從1秒增加到30秒。 – user1882347

+0

我用maxthreads = 256再次嘗試,但它沒有幫助,即使只有25個連接,仍然有失敗(500個內部服務器錯誤)。 – user1882347