我有一个第三方库,造成巨大的内存泄漏。我已经调用了
gc.collect
,并且没有对该库创建的任何对象的引用,但它仍然泄漏。
使用
gc.get_objects()
我已经识别出许多不应该存在的对象,因为它们特定于这个库。
如何跟踪哪些对象使这些泄漏的对象保持活动状态(目标是将其跟踪到全局变量/列表,我可以重置该变量/列表以修复泄漏)?
文件和行号会很好,但即使拥有持有者对象的实例也会有很大帮助。
你可以尝试
gc.get_referrers
。演示:
import gc
def test():
a = ['foo', b := {'bar'}]
for r in gc.get_referrers(b):
print(r)
test()
输出(在线尝试!):
['foo', {'bar'}]