诊断python中的内存泄漏

Ada*_*all 12 python memory-leaks objgraph

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

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

show_refs

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

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

Arm*_*igo 1

这主要是根据 objgraph 的输出进行猜测,但似乎该实例处于循环中,并且其类具有__del__. 在这种情况下,该对象在 CPython 中永远保持活动状态。检查一下:

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

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