[python] 減少Django內存使用量。 低掛果實?


Answers

如果您在mod_wsgi下運行,並且由於它符合WSGI標準,可能會產卵,您可以使用Dozer來查看您的內存使用情況。

在mod_wsgi下,只需將它添加到WSGI腳本的底部即可:

from dozer import Dozer
application = Dozer(application)

然後將瀏覽器指向http://domain/_dozer/index查看所有內存分配的列表。

我也只是添加我對mod_wsgi的支持聲音。 它在mod_python的性能和內存使用方面造成了很大的差異。 Graham Dumpleton對mod_wsgi的支持非常出色,無論是積極開發還是幫助郵件列表中的人員優化他們的安裝。 curse.com David Cramer發布了一些圖表(我現在看起來很不幸),他們在高通訊量網站上切換到mod_wsgi後, curse.com減少了cpu和內存使用量。 幾個django開發者已經改變了。 認真的說,這是一個不用花哨的:)

Question

我的內存使用量隨著時間的推移而增加,並且重新啟動Django對用戶不友好。

我不確定如何去分析內存使用情況,但是關於如何開始測量的一些提示會很有用。

我有一種感覺,有一些簡單的步驟可以產生巨大的收益。 確保'debug'被設置為'False'是一個明顯的重大事件。

任何人都可以推薦別人嗎 在低流量網站上緩存會有多大改進?

在這種情況下,我使用mod_python在Apache 2.x下運行。 我聽說mod_wsgi有點精簡,但在這個階段切換會非常棘手,除非我知道收益會很大。

編輯:感謝迄今為止的提示。 任何建議如何發現什麼是使用內存? 有沒有Python內存分析的指南?

同樣如上所述,有幾件事情會讓我們切換到mod_wsgi變得非常棘手,所以我想對在我們朝這個方向前進的過程中獲得的收益有一些了解。

編輯:卡爾在這裡發布了一個稍微更詳細的回复,值得一讀: Django部署:切割Apache的開銷

編輯: Graham Dumpleton的文章是我在MPM和mod_wsgi相關內容中找到的最好的文章 。 我很失望,沒有人可以提供有關調試應用程序本身的內存使用情況的任何信息。

最終編輯:我一直在討論Webfaction,看他們是否可以協助重新編譯Apache,這是他們在這個問題上的話:

“我真的不認為你可以通過切換到MPM Worker + mod_wsgi設置獲得很多好處,我估計你可以節省大約20MB,但可能不會比這更多。”

所以! 這讓我回到我原來的問題(我仍然不明白)。 人們如何去確定問題所在? 這是一個眾所周知的格言,如果不經過測試就無法進行優化,以查看需要優化的位置,但很少有關於測量Python內存使用情況的教程以及Django沒有的特定教程。

感謝大家的幫助,但我認為這個問題仍然是開放的!

另一個最終編輯;-)

我在django-users列表上詢問了這個問題,並得到了一些非常有幫助的回复

老實說最後一次更新!

這剛剛發布。 可能是最好的解決方案了: 用Pympler分析Django對像大小和內存使用情況




這裡是我用於mod_wsgi的腳本(名為wsgi.py,放在我的django項目的根目錄下):

import os
import sys
import django.core.handlers.wsgi

from os import path

sys.stdout = open('/dev/null', 'a+')
sys.stderr = open('/dev/null', 'a+')

sys.path.append(path.join(path.dirname(__file__), '..'))

os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
application = django.core.handlers.wsgi.WSGIHandler()

根據需要調整myproject.settings和路徑。 我將所有輸出重定向到/ dev / null,因為默認情況下mod_wsgi會阻止打印。 改用日誌記錄。

對於Apache:

<VirtualHost *>
   ServerName myhost.com

   ErrorLog /var/log/apache2/error-myhost.log
   CustomLog /var/log/apache2/access-myhost.log common

   DocumentRoot "/var/www"

   WSGIScriptAlias / /path/to/my/wsgi.py

</VirtualHost>

希望這應該至少可以幫助你設置mod_wsgi,這樣你就可以看到它是否有所作為。




Webfaction實際上有一些技巧來保持django內存使用率。

主要觀點:

  • 確保debug設置為false(你已經知道了)。
  • 在你的apache配置中使用“ServerLimit”
  • 檢查內存中沒有加載大對象
  • 考慮在單獨的進程或服務器中提供靜態內容。
  • 在你的apache配置中使用“MaxRequestsPerChild”
  • 找出並了解您使用的內存量



此外,請檢查您是否使用任何已知的疏散器。 由於unicode處理中的錯誤,MySQLdb被稱為使用Django洩漏大量內存。 除此之外, Django調試工具欄可能會幫助您跟踪生豬。







Related