诊断python中的内存泄漏

时间:2012-10-18 18:53:06

标签: python memory-leaks objgraph

我一直试图使用objgraph调试Coopr包中的内存泄漏:https://gist.github.com/3855150

我把它固定到一个_SetContainer对象,但似乎无法弄清楚为什么该对象会持久存在于内存中。这是objgraph.show_refs

的结果

show_refs

如何查找循环引用以及如何让垃圾收集器收集_SetContainer实例?

我以前认为类本身可能有一个自引用(上图中右边的类下方的元组)。但是objgraph总是将继承的类总是显示为具有自引用元组。您可以看到一个非常简单的测试用例here

1 个答案:

答案 0 :(得分:1)

它主要是从objgraph的输出中猜测,但似乎实例处于一个循环中,其类具有__del__。在这种情况下,对象在CPython中永远保持活着。检查一下:

import gc; gc.collect(); print gc.garbage

http://docs.python.org/library/gc.html#gc.garbage