【发布时间】:2010-09-22 15:54:31
【问题描述】:
我在 Windows 2003 Server 上使用 ActiveState Perl 5.6,并且遇到了一些内存泄漏问题。有没有什么好的工具(甚至是可以提供线索的坏工具)可以用来帮助找到它们。
【问题讨论】:
标签: perl memory-leaks
我在 Windows 2003 Server 上使用 ActiveState Perl 5.6,并且遇到了一些内存泄漏问题。有没有什么好的工具(甚至是可以提供线索的坏工具)可以用来帮助找到它们。
【问题讨论】:
标签: perl memory-leaks
所有的 perl 程序内存泄漏要么是一个持有引用的 XS,要么是一个循环数据结构。 Devel::Cycle 是查找循环引用的好工具,如果您知道哪些结构可能包含循环。 Devel::Peek 可用于查找引用计数高于预期的对象。
如果您不知道该去哪里寻找,Devel::LeakTrace::Fast 可能是一个不错的首选,但您需要为调试而构建的 perl。
如果您怀疑泄漏在 XS 空间内,那就更难了,Valgrind 可能是您最好的选择。 Test::Valgrind 可能会帮助您减少需要搜索的代码量,但这在 Windows 上不起作用,因此您必须将(至少是泄漏的部分)移植到 Linux 才能做到这一点。
【讨论】:
Devel::Gladiator 将向您显示 Perl 在任何给定时间在内存中具有多少每种变量类型的列表,以及它们所引用的内容。对于确定正在创建但未释放的对象类型非常有用。
【讨论】:
由于尚未提及,Devel::Size 将报告数据结构的大小。没有给出其他信息,它用来确定数据结构“边界”的规则是不透明的。对于简单的结构,这不是问题。
Devel::SizeMe 是我的一个爱好项目,旨在解决 Devel::Size 的问题并启用 perl 解释器的整个内存使用情况的可视化。请参阅my blog 了解更多信息,包括截屏视频和视频的链接。我的目标之一是实现泄漏的检测和可视化,但这还有很长的路要走。
更新:
除了其他 cmets,您可能会发现我在 LPW2013 上的 Perl Memory Use talk 很有用。我建议您观看the screencast,因为它解释了幻灯片,并在结尾有一些可爱的视觉效果和一些问答。
我还建议查看我在演讲中提到的 Paul Evans Devel::MAT 模块。
【讨论】: