我一直试图使用objgraph调试Coopr包中的内存泄漏:https://gist.github.com/3855150
我把它固定到一个_SetContainer
对象,但似乎无法弄清楚为什么该对象会持久存在于内存中。这是objgraph.show_refs
:
如何查找循环引用以及如何让垃圾收集器收集_SetContainer
实例?
我以前认为类本身可能有一个自引用(上图中右边的类下方的元组)。但是objgraph总是将继承的类总是显示为具有自引用元组。您可以看到一个非常简单的测试用例here。
答案 0 :(得分:1)
它主要是从objgraph的输出中猜测,但似乎实例处于一个循环中,其类具有__del__
。在这种情况下,对象在CPython中永远保持活着。检查一下:
import gc; gc.collect(); print gc.garbage