Как я могу отладить (возможно, связанные с библиотекой C) проблемы с памятью, используя 64-битный Python в Windows? - PullRequest
3 голосов
/ 23 апреля 2011

У меня есть программа на Python, которая обрабатывает фреймы изображений с помощью Python 2.7, PIL, OpenCV и numpy / scipy. Насколько я знаю, он не поддерживает списки предыдущего кадра. Тем не менее, потребление памяти неуклонно растет, поскольку программа обрабатывает все больше и больше кадров.

Есть несколько хороших обсуждений решений по профилированию памяти для Python, но, похоже, они ориентированы на 32-битные или Linux-решения. Что я должен использовать с 64-битным Python 2.7 в Windows? Первоначальные исследования показывают, что проблема связана с библиотекой C. Я особенно заинтересован в инструментах, помогающих обнаруживать утечки из библиотеки C или находить утечки в Python / OpenCV / PIL.

Ответы [ 3 ]

1 голос
/ 30 апреля 2011

У меня была похожая проблема с отслеживанием серьезной утечки памяти в тяжелом коде, где ни один из обычных инструментов и средств диагностики памяти Python не обнаружил утечку или не намекнул на ее источник.

В моем случае источником утечки был код интерфейса scipy для пакета решателя UMFPACK, который вызывал процедуру инициализации языка C при каждом вызове конструктора объекта интерфейса, но никогда не вызывал процедуру деинициализациикогда объект интерфейса был разрушен, что привело к утечке памяти и внутренним выделениям со скоростью около 15 Мб на вызов.В приложении с вызовами 10-20 тыс. Влияние было серьезным.Поскольку выделение памяти не было выполнено с помощью диспетчера памяти Python, такие вещи, как heapy, не могли обнаружить утечку.

Я столкнулся с необходимостью использовать отладку в стиле valgrind + "printf", чтобы отследить преступника.Возможно, вам придется взглянуть на анализаторы памяти, отличные от Python, и инструменты, чтобы выяснить, откуда происходит утечка.Я не работаю в среде Windows и не знаком со стандартными цепочками инструментов, поэтому не могу предложить, что именно использовать.Возможно, кто-то еще мог бы внести некоторые предложения.

1 голос
/ 05 мая 2011

Дэвид Малком выступил с докладом в этом году на PyCon 2011 под названием Чувак, где моя память? .Он рассказывает об отладке использования памяти в Python, а также показывает инструмент, разработанный для анализа использования памяти, под названием gdb-heap , который может отслеживать использование памяти вплоть до отдельных байтов.Действительно, действительно классная беседа.Я предполагаю, что было бы трудно использовать gdb-heap в Windows (может быть, полезно протестировать на другой платформе и, возможно, отладить там?), Но речь пойдет о многих общих проблемах, решениях и т. Д.

1 голос
/ 23 апреля 2011

Инструменты, обсуждаемые здесь, оказались очень полезными: http://mg.pov.lt/blog/hunting-python-memleaks.html

Здесь есть версия его кода здесь с некоторыми дополнениями для измерения размеров массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...