Xpoint
   [напомнить пароль]

Обнаружение и устранение утечек памяти в Perl программах

Модули

  • Devel::Leak::Object - Специально для объектно-ориентированных программ, но просто незаменим. Наверное самое большое преимущество этого модуля в возможности отслеживать как все классы, так и отдельную группу. Модуль переопределяет функцию bless и DESTROY, а при выходе из программы выдает список объектов, которые не были уничтожены и трассировку стека в том месте программы, где объект был создан. Дальше обычно много легче самому проверить логику программы от точки создания объекта. Для работы всех этих вкусностей нужны патчи: http://rt.cpan.org/Ticket/Display.html?id=21145. Есть еще глюки и дока не очень, нокод pure perl и не очень сложный :) так что патчим и отсылаем улучшения, так как модуль явно заслуживает внимания.
  • Devel::Cycle - принимает ссылку и ищет циклы внутри. Полезно, когда вы знаете, что цикл внутри, но не найдет проблему если кто-то ссылается на этот объект снаружи.
    • Test::Memory::Cycle - несколько простых функци для использования в тестах на утечки памяти (использует Devel::Cycle). После того как вы избавились от цкилических ссылок в какой-то группе структур в вашей програме, вы пишете несколько тестов, которые проверябт что это так, что позволит вам быть частично уверенным, что больше этого не повторится.
  • Devel::FindRef - неплохой модуль, хоть и немного сыроват, но может помочь найти ссылки на объект, когда вы точно знаете, что объект не уничтожается, а внутри цикла нет. Например вы сохранили ссылку в глобальной переменной пакета. Это модуль можно использовать для написания модуля поиска циклов в переменных, которые ссылаются на текущую структуру.
  • Devel::Monitor
  • Object::Destroyer
  • Devel::ObjectTracker
  • Devel::GC::Helper
  • Devel::Leak
  • Devel::LeakTrace, Devel::LeakTrace::Fast - эти два модуля использую возможность perl устанавливать дополнительный обработчик на каждый оператор, что достаточно сильно замедляет выполнение, но позволяет отследить все на самом низком уровне. Второй модуль и правда быстрее так как на большом проекте я (Руслан) просто не дождался запуска сервера с первым модулем, но все равно скорость оставляет желать лучшего.
  • Devel::Size
  • Devel::DumpSizes
  • Devel::Size::Report
  • Devel::Arena
Powered by POEM™ Engine Copyright © 2002-2005