我已經有了一些發展後,已經開始消耗的內存量的增加在運行時相當複雜(約20,000)行Python程序。找出所有內存被使用的最佳工具和技術是什麼?
通常這歸結爲意外地保留對對象引用或擴展模塊錯誤(由於我們一直在使用Python 2.4安裝,因此不太可能)。
我們使用各種第三方庫,如Twisted,Twisted Conch和MySQLdb。
我已經有了一些發展後,已經開始消耗的內存量的增加在運行時相當複雜(約20,000)行Python程序。找出所有內存被使用的最佳工具和技術是什麼?
通常這歸結爲意外地保留對對象引用或擴展模塊錯誤(由於我們一直在使用Python 2.4安裝,因此不太可能)。
我們使用各種第三方庫,如Twisted,Twisted Conch和MySQLdb。
Python的內存由垃圾收集器管理。一般來說,不應該存在內存泄漏問題(絕對不適用於Python2.5及以上版本),除非您碰巧在C/C++中編寫擴展模塊。在這種情況下,Valgrind(博客文章 - http://bruynooghe.blogspot.com/2008/12/finding-memory-leaks-in-python.html)可能會有所幫助。我發現這個人 - http://mg.pov.lt/blog/hunting-python-memleaks已經使用PDB和matplotlib來跟蹤內存泄漏。我希望這會有所幫助,我沒有修復Python內存泄漏的經驗。
在一個複雜的程序中,有時候你會在沒有意識到的情況下引用一個對象。這使得垃圾收集器無法回收內存。 Sebastjan連接的問題的方式更好;我真正想要的是看我的記憶在哪裏使用。 – 2009-02-10 14:17:24
通常,未能關閉遊標是最常見的內存泄漏之一。垃圾收集器無法看到遊標中涉及的MySQL資源。除非明確調用close()
方法,否則MySQL不知道Python方面已經發布。
經驗法則。打開,使用並關閉遊標,只需儘可能短的一段代碼即可管理。
請關閉 - 這是一個重複的 – 2009-02-10 14:26:15
關於此主題已有[question](http://stackoverflow.com/questions/110259/python-memory-profiler/110826)。 – Seb 2009-02-10 13:53:23