2009-02-10 22 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方面已经发布。

经验法则。打开,使用并关闭游标,只需尽可能短的一段代码即可管理。