12

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

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

show_refs

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

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

4

1 回答 1

1

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

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

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

于 2012-10-19T09:02:07.803 回答