2010-02-19 35 views
24

我將我的第一個Django項目從DjangoEurope移到Webfaction,這開始了一個看起來像內存泄漏的問題。隨着服務器進程的每次請求內存使用量增加大約500kb。它永遠不會停止。這一直持續到Webfaction因爲使用太多的內存而殺死它。Django的內存使用量隨着每個請求而上漲

當我在瀏覽器中刷新Django的管理界面時,我可以清楚地看到這一點(儘管每個頁面都會發生這種情況,但不僅僅是管理界面 - 我雖然管理界面會是一個很好的測試用例,因爲沒有我代碼直接在那裏)。隨着每個瀏覽器重新加載內存使用量上升幾百千字節。

I測試使用由Webfaction建議的命令的存儲器:

ps -u publica -o rss,etime,pid,command 

進一步瞭解我的設置:

  • Django的1.1(穩定)
  • 默認Webfaction Django的設置使用Apache和mod_wsgi
  • DEBUG設置爲False
  • 來自Webfaction的MySQLdb 1.2.2,但聽到它有一些問題,我試過版本1.2.3c。沒有幫助。

編輯:我創建了一個空的Django項目 - Django缺省的配置加上django.contrib.admin和新鮮的空數據庫(都與MySQL和PostgreSQL試過)。我開始在瀏覽器中重新加載Django admin,並觀看內存使用情況。起初我看到問題的發生 - 內存使用量在每次重新加載後都會增加。但隨後穩定並停止增長。這與我的原始項目在Django Europe上的表現一致。不幸的是,在Webfaction中,它似乎永遠不會穩定(或者至少不在我的賬戶可用的內存限制內)。有什麼建議?

+0

如果你在模型中做了一些漏洞,它肯定會顯示在管理員中,所以我不確定你是否已經將你的代碼視爲罪魁禍首。對於它的價值,我已經在Webfaction上運行了一年多的Django應用程序,並沒有像這樣的問題。 – 2010-02-19 05:36:59

回答

12

恐怕我沒有得到任何明確的答案。 Graham Dumpleton的提示最有幫助,但不幸的是他沒有做出答案(只是評論),所以沒有辦法接受他的迴應。

雖然我還沒有完全解決這個問題,這裏有遇到類似問題的其他人的一些基本技巧:

+0

鏈接到webfaction的帖子壞了 – Olli 2012-11-20 08:58:50

+1

@Olli謝謝。我更新(並擴展)了Webfaction的鏈接。 – 2012-11-20 16:33:00

1

我有與webfaction相同的問題。

我使用的方法以及webfaction告訴我應該繼續使用的方法是運行一個cron作業,每5分鐘檢查一次內存,然後重新啓動任何失控的應用程序。

在webfaction上的4個python應用程序中,我平均每天重新啓動4次。

+0

這很糟糕。在DjangoEurope上一切正常。必須有一個真正的解決方案... – 2010-02-19 10:20:34

+2

如果他們建議用戶手動重新啓動活動進程,聽起來像是他們的環境有問題。 – jathanism 2010-02-19 15:11:59

0

我在Webfaction上也遇到了內存問題 - 直到我添加了第五個應用程序後,他們才真正地出現問題。我嘗試了一些對我的apache配置的調整,但最終對我的工作只是切換到mod_wsgi。

+0

我已經使用mod_wsgi :( – 2010-02-19 12:52:46

+2

但是你是否使用mod_wsgi的守護進程模式,或者你是否嘗試在mod_wsgi的嵌入模式下運行一切?即使使用WebFaction配置將Apache服務器子進程保持爲2,如果使用嵌入模式仍然會更多的內存比守護進程模式Django實例的一個進程 – 2010-02-21 05:09:32

+0

@Graham - 謝謝。我將mod_wsgi升級到了3.1(從webfaction提供的2.5開始),這似乎有點幫助(我第一次看到實際使用內存的實例然後我切換到一個守護進程模式,但沒有注意到太多的區別,我感到有點被配置選項嚇倒了,我把我的'ServerLimit'設置爲「2」,'MaxRequestsPerChild'設置爲「 500「,'WSGIDaemonProcess'到[[mydomain] processes = 2 inactivity-timeout = 1800 threads = 15]和'WSGIRestrictEmbedded'開啓。這個配置是否有意義? – 2010-02-21 13:30:38

0
+0

我確實從分析這些提示開始。我確實按照建議的方式提供靜態文件(我在過去兩天至少檢查了五次;))。我不知道劇本。謝謝。 – 2010-02-19 18:34:10

+0

如果您只運行一個應用程序,則很容易避免出現問題。無論如何,我認爲他們實際上每隔一段時間都會重新啓動您的應用程序。但是當你在一個賬戶中獲得四個應用時,開始達到你的極限非常容易 - 特別是當網絡傳輸對內存吝嗇時,並且不會讓你爲每個賬戶購買超過240 MB的內容。 – 2010-02-21 02:01:09

+0

嗯..不知道webfaction是限制你可以購買的內存......謝謝。 – 2010-02-24 19:24:38

0

mod_python和mod_wsgi模塊都加載到Apache?

我知道mod_wsgi不喜歡在它的building中有mod_python。檢查它沒有加載。

+1

可以一起使用mod_python和mod_wsgi,這不是說mod_wsgi不喜歡它。你只是放棄mod_wsgi的一些配置選項,因爲mod_python負責初始化Python,而不是mod_wsgi。另外,即使在Apache中啓用了mod_python,也沒有使用內存泄漏。如果大量Apache重新啓動並且不是每個請求都會發生,那麼內存泄漏只會成爲問題。 – 2010-02-26 11:03:52

1

檢查進程內存緩存後端是否啓用,如果是,可能是問題(每個請求的新緩存條目)。

+0

不是。我現在使用memcached(它使用它自己的進程,它可以單獨增長),但關閉緩存不會緩存任何內容。 – 2010-02-28 10:12:17

2

我們對Webfaction類似的問題,但事實證明這不是因爲它們在所有。 Django在使用帶有大量元素的站點地圖時存在高內存使用情況中的錯誤:http://code.djangoproject.com/ticket/11572

當我們移除站點地圖時,它不再在當時拍攝90 Mb。只是覺得我應該提到它,因爲它需要很長時間才能用於排除故障。

相關問題