2009-02-10 21 views
30

可能重複:
Python memory profiler我如何在Python程序中發現內存泄漏?

我已經有了一些發展後,已經開始消耗的內存量的增加在運行時相當複雜(約20,000)行Python程序。找出所有內存被使用的最佳工具和技術是什麼?

通常這歸結爲意外地保留對對象引用或擴展模塊錯誤(由於我們一直在使用Python 2.4安裝,因此不太可能)。

我們使用各種第三方庫,如Twisted,Twisted Conch和MySQLdb。

+1

請關閉 - 這是一個重複的 – 2009-02-10 14:26:15

+0

關於此主題已有[question](http://stackoverflow.com/questions/110259/python-memory-profiler/110826)。 – Seb 2009-02-10 13:53:23

回答

1

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內存泄漏的經驗。

+15

在一個複雜的程序中,有時候你會在沒有意識到的情況下引用一個對象。這使得垃圾收集器無法回收內存。 Sebastjan連接的問題的方式更好;我真正想要的是看我的記憶在哪裏使用。 – 2009-02-10 14:17:24

14

通常,未能關閉遊標是最常見的內存泄漏之一。垃圾收集器無法看到遊標中涉及的MySQL資源。除非明確調用close()方法,否則MySQL不知道Python方面已經發布。

經驗法則。打開,使用並關閉遊標,只需儘可能短的一段代碼即可管理。