我在Windows2003Server上使用ActiveState Perl5.6,并且遇到了一些内存泄漏问题。有没有好的工具(或者甚至坏的工具可以给出线索),我可以用来帮助找到它们。
发布于 2008-11-17 12:19:49
所有perl程序内存泄漏要么是持有引用的XS,要么是循环数据结构。如果你知道什么结构可能包含循环,Devel::Cycle是一个很好的查找循环引用的工具。Devel::Peek可用于查找引用计数高于预期的对象。
如果您不知道还可以在哪里查找,Devel::LeakTrace::Fast可能是一个很好的首选,但是您需要一个用于调试的perl。
如果您怀疑泄漏是在XS-space内部发生的,那就更难了,Valgrind可能是您最好的选择。Test::Valgrind可能会帮助你减少你需要搜索的代码量,但这在Windows上是行不通的,所以你必须(至少是有漏洞的部分)移植到Linux才能做到这一点。
发布于 2009-12-08 07:06:38
Perl将向您显示一个列表,其中列出了在任何给定时间,Devel::Gladiator在内存中有多少个变量类型,以及它们引用了什么。对于找出正在创建但未释放的对象的类型非常有用。
发布于 2013-09-30 21:06:28
由于还没有提到,Devel::Size将报告数据结构的大小。没有给出其他信息,它用来确定数据结构“边界”的规则也是不透明的。对于简单的结构,这不是问题。
Devel::SizeMe是我的一个业余爱好项目,旨在解决Devel::大小的问题,并支持可视化perl解释器的整个内存使用情况。有关更多信息,请参阅my blog,其中包括截屏视频和视频的链接。我的目标之一是实现泄漏的检测和可视化,但这仍然是一条路要走。
更新:
除了其他评论之外,您可能会发现我在LPW2013上的Perl Memory Use talk很有用。我推荐看the screencast,因为它解释了幻灯片,并在最后有一些可爱的视觉效果和一些问答。
我还建议看看我在演讲中提到的Paul Evans Devel::MAT模块。
https://stackoverflow.com/questions/295385
复制相似问题