Подтвердить что ты не робот

Как я могу найти утечки памяти в моей программе Python?

Возможный дубликат:
Профайлер памяти Python

У меня довольно сложная (около 20 000) линейная программа Python, которая после некоторого развития начала потреблять все большее количество памяти при ее запуске. Каковы наилучшие инструменты и методы для определения того, для чего используется вся память?

Обычно это сводится к неожиданному содержанию ссылок на объекты или ошибкам модуля расширения (что особенно нежелательно, поскольку мы некоторое время использовали установку Python 2.4).

Мы используем различные сторонние библиотеки, такие как Twisted, Twisted Conch и MySQLdb.

4b9b3361

Ответ 1

Как правило, не удается закрыть курсоры - один из наиболее распространенных типов утечек памяти. Сборщик мусора не может видеть ресурсы MySQL, связанные с курсором. MySQL не знает, что сторона Python была выпущена, если явно не указан метод close().

Общее правило. Откройте, используйте и закрыть курсоры как короткий промежуток кода, который вы можете управлять.

Ответ 2

Память Python управляется сборщиком мусора. В общем, не должно быть проблем с утечкой памяти (определенно не для Python2.5 и выше), если только вы не собираетесь писать модули расширения в C/С++. В этом случае Valgrind (сообщение в блоге - http://bruynooghe.blogspot.com/2008/12/finding-memory-leaks-in-python.html) может оказаться полезным. Я обнаружил, что этот человек - http://mg.pov.lt/blog/hunting-python-memleaks использовал PDB и matplotlib для отслеживания утечки памяти. Надеюсь, это поможет, у меня нет опыта в устранении утечек памяти Python.