34

可能重复:
Python 内存分析器

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

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

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

4

2 回答 2

18

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

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

于 2009-02-10T13:58:31.727 回答
-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 内存泄漏的经验。

于 2009-02-10T13:53:38.027 回答