【问题标题】:Are there any tools for finding memory leaks in my Perl program? [closed]是否有任何工具可以在我的 Perl 程序中查找内存泄漏? [关闭]
【发布时间】:2010-09-22 15:54:31
【问题描述】:

我在 Windows 2003 Server 上使用 ActiveState Perl 5.6,并且遇到了一些内存泄漏问题。有没有什么好的工具(甚至是可以提供线索的坏工具)可以用来帮助找到它们。

【问题讨论】:

    标签: perl memory-leaks


    【解决方案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 解释器的整个内存使用情况的可视化。请参阅my blog 了解更多信息,包括截屏视频和视频的链接。我的目标之一是实现泄漏的检测和可视化,但这还有很长的路要走。

        更新:

        除了其他 cmets,您可能会发现我在 LPW2013 上的 Perl Memory Use talk 很有用。我建议您观看the screencast,因为它解释了幻灯片,并在结尾有一些可爱的视觉效果和一些问答。

        我还建议查看我在演讲中提到的 Paul Evans Devel::MAT 模块。

        【讨论】:

          猜你喜欢
          • 2012-08-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多