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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

Обновление:

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

Я также предлагаю рассмотреть модуль Paul Evans Devel::MAT, который я упоминаю в разговоре.