python python記憶體用量 - 減少Django內存使用量。 低掛果實?




5 Answers

確保你沒有保留對數據的全局引用。 這可以防止python垃圾收集器釋放內存。

不要使用mod_python 。 它在apache中加載一個解釋器。 如果您需要使用apache,請改用mod_wsgi 。 切換並不困難。 這很容易。 mod_wsgidjango更容易為腦死亡mod_python

如果你能從你的需求中移除apache,那對你的記憶會更好。 spawning似乎是運行python web應用程序的新型快速可伸縮方式。

編輯 :我沒有看到如何切換到mod_wsgi可能是“ 棘手 ”。 這應該是一項非常簡單的任務。 請詳細說明您使用交換機時遇到的問題。

python記憶體不足 python吃記憶體

我的內存使用量隨著時間的推移而增加,並且重新啟動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對像大小和內存使用情況




這些是我知道的Python內存分析器解決方案(與Django相關):

免責聲明:我擁有後者的股份。

單個項目的文檔應該讓你了解如何使用這些工具來分析Python應用程序的內存行為。

以下是一個很好的“戰爭故事”,也提供了一些有用的指針:




除了不保留對大數據對象的全局引用外,盡量避免將大數據集加載到內存中。

在守護進程模式下切換到mod_wsgi,並使用Apache的worker mpm而不是prefork。 後一步可以讓您以更少的內存開銷為更多的並髮用戶提供服務。




mod_wsgi的另一個WSGIDaemonProcessWSGIDaemonProcess指令中設置maximum-requests參數,而mod_wsgi將每WSGIDaemonProcess重新啟動一次守護進程。 對於用戶來說應該沒有明顯的效果,除了第一次新鮮的進程被命中時緩慢的頁面加載,因為它會將Django和你的應用程序代碼加載到內存中。

但即使您確實有內存洩漏,也應該防止進程大小變得過大,而無需中斷向用戶提供的服務。




緩存:確保它們被刷新。 它很容易在緩存中登陸,但由於緩存參考,永遠不會被GC'd。

Swig'd代碼:確保任何內存管理都正確完成,在python中很容易錯過這些內容,尤其是第三方庫

監控:如果可以,請獲取有關內存使用情況和命中的數據。 通常你會看到某種類型的請求和內存使用情況之間的關聯。




Related

python django profiling memory-management mod-python