首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python内存泄漏追踪?

Python内存泄漏追踪?
EN

Stack Overflow用户
提问于 2011-07-25 05:44:37
回答 1查看 1.4K关注 0票数 7

不知何故,我的Python程序在运行时会占用越来越多的内存( VIRT和RES) "top“命令的列不断增加。

然而,我非常仔细地仔细检查了我的代码,我确信没有内存泄漏(没有使用任何字典,没有全局变量。这只是一个main方法多次调用子方法)。

我使用heapy来分析我的内存使用情况

代码语言:javascript
复制
from guppy import hpy;
heap = hpy();
.....
print heap.heap();

每次main方法都会调用sub方法。令人惊讶的是,它总是给出相同的输出。但是内存使用量一直在增长。

我想知道我是否没有正确使用heapy,或者"top“命令中的VIRT和RES并没有真正反映我的代码使用的内存?

或者,是否有人能提供更好的方法来跟踪Python脚本中的内存使用情况?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-25 22:39:51

两种可能的情况:

  • 您的函数是纯Python,在这种情况下,可能的原因包括

代码语言:javascript
复制
- you are storing an increasing number of large objects
- you are having cycles of objects with a `__del__` method, which the gc won't touch

我建议使用gc模块以及gc.garbagegc.get_objects函数(请参阅http://docs.python.org/library/gc.html#module-gc)来获取现有对象的列表,然后您可以通过查看每个对象的__class__属性来检查它们,以获取有关对象类的信息。

  • 你的函数至少有一部分是用C/ C++编写的,在这种情况下,问题可能出在C/ case代码中。上面的建议仍然适用,但不能看到所有的泄漏:您将看到由于错过对PY_DECREF的调用而导致的泄漏,但不会看到没有相应释放的低级C/C++分配。为此,您将需要valgrind。有关该主题

的详细信息,请参阅this question

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6809947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档