Существуют ли инструменты для обнаружения утечек памяти в моей программе Perl? - PullRequest
12 голосов
/ 17 ноября 2008

Я использую ActiveState Perl 5.6 на Windows 2003 Server, и у меня возникают проблемы с утечкой памяти. Есть ли какие-нибудь хорошие инструменты (или даже плохие инструменты, которые могли бы дать подсказку), которые я мог бы использовать, чтобы помочь найти их.

Ответы [ 3 ]

13 голосов
/ 17 ноября 2008

Все утечки памяти программы Perl будут либо XS, удерживающими ссылку, либо циклической структурой данных. Devel :: Cycle - отличный инструмент для поиска циклических ссылок, если вы знаете, какие структуры могут содержать циклы. Devel :: Peek может использоваться для поиска объектов с большим числом ссылок, чем ожидалось.

Если вы не знаете, где еще искать, Devel :: LeakTrace :: Fast может быть хорошим первым местом, но для отладки вам понадобится Perl.

Если вы подозреваете, что утечка находится внутри XS-пространства, это намного сложнее, и Valgrind , вероятно, будет вашим лучшим выбором. Test :: Valgrind может помочь вам уменьшить объем кода, который нужно искать, но это не сработает в Windows, поэтому вам придется портировать (по крайней мере, утечку) на Linux, чтобы сделать это.

5 голосов
/ 08 декабря 2009

Devel :: Gladiator покажет вам, сколько из каждого типа переменных Perl находится в памяти в любой момент времени, и на что они ссылаются. Очень полезно для определения типа объектов, которые создаются, но не освобождаются.

4 голосов
/ 30 сентября 2013

Поскольку это еще не было упомянуто, Devel :: Size сообщит о размере структуры данных. Никакой другой информации не дано, и правила, которые она использует для определения «границы» вашей структуры данных, непрозрачны. Для простых структур это не проблема.

Devel :: SizeMe - мой хобби-проект, целью которого является решение проблем Devel :: Size и предоставление возможности визуализации использования всей памяти интерпретатором Perl. См. мой блог для получения дополнительной информации, включая ссылки на скринкасты и видео. Одна из моих целей - включить обнаружение и визуализацию утечек, но это еще далеко.

Обновление:

В дополнение к другим комментариям, вы можете найти полезными мои Perl Memory Use talk на LPW2013. Я бы порекомендовал посмотреть скринкаст , поскольку он объясняет слайды и имеет несколько симпатичных визуальных элементов и некоторые вопросы и ответы в конце.

Я бы также посоветовал взглянуть на модуль Пола Эванса Devel :: MAT , о котором я упоминал в докладе.

...