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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
0
4 137
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

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

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

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

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

Обновления:

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

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

Другие вопросы по теме