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

时间:2009-02-10 13:37:15

标签: python debugging memory-leaks twisted

  

可能重复:
  Python memory profiler

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

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

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

2 个答案:

答案 0 :(得分:15)

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

经验法则。打开,使用并关闭游标,尽可能短的代码范围。

答案 1 :(得分: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内存泄漏的经验。