2011-03-14 33 views
3

我有一個Django項目,以及一個問題 - 它吃大量的內存和託管太多的負荷。Django項目吃內存

我如何才能找到項目問題的地方,它們專吃大量的內存?

回答

3

一般用於調試/分析,我建議Django的調試工具欄裏的起始位置,以及在各種提示:

http://docs.djangoproject.com/en/dev/topics/db/optimization/

然而,這不會給內存使用信息。如果你真的需要這樣做,你可以嘗試一些使用pympler的中間件來記錄內存使用情況,同時調試並運行開發服務器。

http://www.rkblog.rk.edu.pl/w/p/profiling-django-object-size-and-memory-usage-pympler/?c=1

我發現,這樣做研磨我的webapps到接近停止,然後有使用的DEV-網絡服務器(例如,媒體文件沒有得到服務)的問題。

但正如有人說你最好的選擇是設置DEBUG=False:上

http://docs.djangoproject.com/en/dev/faq/models/#why-is-django-leaking-memory

4

如果你使用Django與DEBUG = True然後Django的記錄每一個數據庫查詢可以快速安裝和使用的內存大量。

如果你沒有在DEBUG模式下運行,那麼看看gc模塊,特別是嘗試添加gc.set_debug(gc.DEBUG_LEAK)settings.py。這會向您顯示關於哪些對象正在使用內存的大量信息。

+0

有調試是definitly使你的記憶力迅速填補好辦法。 – Exelian 2011-03-14 14:15:59

1

安德魯·威爾金森說,這可能與該DEBUG = True設置做。但是,知道您是單獨運行此項目還是作爲Web服務器運行也可能很重要。

甲Django將打開全自動高速緩存查詢集時的請求並刪除引用時的請求返回。由於在一個獨立的項目,因此每一個查詢集沒有請求引用永不刪和不斷要求得到保存。

要修復獨立的python問題,請在完成一堆請求後直接調用django.db.reset_queries()。這將允許查詢集被垃圾收集並修復泄漏。