如何在Python程序中找到内存泄漏?

Dic*_*eed 31 python debugging memory-leaks twisted

可能重复:
Python内存分析器

我有一个相当复杂(大约20,000)的Python系列程序,经过一些开发后,它在运行时开始消耗越来越多的内存.找出所有内存使用的最佳工具和技术是什么?

通常这归结为意外地保持对对象的引用,或扩展模块错误(这不是特别可能,因为我们已经使用Python 2.4安装一段时间).

我们使用各种第三方库,如Twisted,Twisted Conch和MySQLdb.

S.L*_*ott 16

通常,未能关闭游标是最常见的内存泄漏类型之一.垃圾收集器无法看到游标中涉及的MySQL资源.除非close()明确调用该方法,否则MySQL不知道Python方面已发布.

经验法则.在您可以管理的短代码范围内打开,使用和关闭游标.


bat*_*rat -2

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 所链接的问题的方式更好;我真正想要的是看看我的记忆被用在哪里了。 (20认同)