Ответ 1
В основном он угадывает вывод objgraph, но кажется, что экземпляр находится в цикле, а его класс имеет __del__
. В этой ситуации объект сохраняется навсегда в CPython. Проверьте это:
import gc; gc.collect(); print gc.garbage
Я пытаюсь отладить утечку памяти в пакете Coopr, используя objgraph: https://gist.github.com/3855150
Я привязал его к объекту _SetContainer
, но не могу понять, почему этот объект сохраняется в памяти. Здесь результат objgraph.show_refs
:
Как мне найти круговую ссылку и как я могу собрать сборщик мусора для сбора экземпляра _SetContainer
?
Я ранее думал, что сам класс может иметь самореференцию (кортеж чуть ниже класса справа на изображении выше). Но objgraph всегда показывает унаследованные классы всегда как имеющие саморегуляторный кортеж. Вы можете увидеть очень простой тестовый пример здесь.
В основном он угадывает вывод objgraph, но кажется, что экземпляр находится в цикле, а его класс имеет __del__
. В этой ситуации объект сохраняется навсегда в CPython. Проверьте это:
import gc; gc.collect(); print gc.garbage