如何识别在Perl脚本中累积内存使用的位置?
在我的Perl脚本中,它以高占用内存的累积速度运行.我已经尝试在不再需要时立即清除可疑变量,但问题无法解决.是否有任何方法可以在执行块之前和之后监视内存占用的变化?
解决方法
我最近不得不解决我的一个程序中的内存不足情况.虽然我没有声称自己是这方面的专家,但我将分享我的发现,希望它能使某些人受益.
1.高,但稳定的内存使用 首先,您应确保不仅存在高而稳定的内存使用情况.如果内存使用率稳定,即使您的进程不适合可用内存,下面的讨论也不会有太大帮助.以下是Perl文档here和here,in this SO question,in this PerlMonks discussion中值得一读的一些注释.如果您熟悉Perl内部,则有一个有趣的分析here.在Tim Bunce’s presentation中可以找到许多深层信息.您应该知道Perl可能不会将内存返回到系统even if you 2.内存使用量稳步增长 在内存使用量稳步增长的情况下,这可能最终导致内存不足的情况.我的问题结果是循环引用的情况.根据StackOverflow上的this answer,循环引用是Perl中内存泄漏的常见原因.根本原因是Perl使用引用计数机制和cannot release循环引用内存until program exit.(注意:我无法在Perl的最后一个声明的文档中找到更新的版本.) 您可以使用Scalar::Util::weaken来“弱化”循环参考链(另请参见http://perlmaven.com/eliminate-circular-reference-memory-leak-using-weaken). 3.进一步阅读 > Tim Bunce’s presentation(slide here);也在这blog post 4.工具 >在Unix上,你可以做系统(“ps -p $$-o vsz,rsz,sz,size”)警告:正如Tim Bunce的演示中所解释的那样,你需要跟踪VSIZE而不是RSS (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |