在我的Perl程序中是否有任何查找内存泄漏的工具?

时间:2008-11-17 11:45:03

标签: perl memory-leaks

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

3 个答案:

答案 0 :(得分:13)

所有perl程序内存泄漏都将是保存在引用上的XS,或者是循环数据结构。 Devel::Cycle是一个很好的工具,用于查找循环引用,如果您知道哪些结构可能包含循环。 Devel::Peek可用于查找引用次数高于预期的对象。

如果你不知道在哪里看,Devel::LeakTrace::Fast可能是一个很好的第一名,但是你需要一个用于调试的perl。

如果你怀疑泄漏是在XS空间内,那就更难了,Valgrind可能是你最好的选择。 Test::Valgrind可以帮助您减少搜索所需的代码量,但这不适用于Windows,因此您必须将(至少泄漏部分)移植到Linux才能执行此操作。 / p>

答案 1 :(得分:5)

Devel::Gladiator将显示Perl在任何给定时间内存在的每个变量类型的数量以及它们引用的内容的列表。对于确定正在创建但未释放的对象类型非常有用。

答案 2 :(得分:4)

由于尚未提及,Devel::Size将报告数据结构的大小。没有给出其他信息,它用于确定数据结构“边界”的规则是不透明的。对于简单的结构,这不是问题。

Devel::SizeMe是我的一个业余爱好项目,旨在解决Devel :: Size的问题,并实现perl解释器的整个内存使用的可视化。有关其他信息,请参阅my blog,包括屏幕录像和视频的链接。我的目标之一是实现泄漏的检测和可视化,但这还有一段距离。

更新

除了其他评论之外,您可能会发现LPW2013上的Perl Memory Use talk有用。我建议观看the screencast,因为它解释了幻灯片,最后有一些可爱的视觉效果和一些Q& A.

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