我们有一个非常棒的perl代码库.
一些运行多个小时的进程(ETL作业)突然开始消耗比平常更多的RAM.分析相关版本的变化是一个缓慢而令人沮丧的过程.我希望使用更自动化的分析来识别罪魁祸首.
我们的现场环境是关于Debian挤压的perl 5.14.
不过,我可以访问很多OS X 10.5机器.Dtrace和perl似乎在这个平台上很好地一起玩.似乎在Linux上使用dtrace需要启动更多工作.我希望我们的实时系统和开发OS X系统之间的内存分配模式类似 - 或者至少相似,足以帮助我找到这种新内存使用的起源.
这个幻灯片:
https://dgl.cx/2011/01/dtrace-and-perl
显示了如何使用dtrace来显示perl sub对malloc的调用次数.我感兴趣的是跟踪perl在进程生命周期内执行每个sub时分配的内存总量.
关于如何做到这一点的任何想法?
问题的答案是“是”。dtrace 可用于分析 perl 进程中的内存使用情况。
这段代码:
https://github.com/astletron/perl-dtrace-malloc/blob/master/perl-malloc-total-bytes-by-sub.d
跟踪程序中每个子程序的调用和返回之间内存使用量的增加情况。作为一个额外的好处,dtrace 似乎会为您对输出进行排序(至少在 OS X 上)。凉爽的。
感谢大家的参与。我自己回答了这个问题,因为这个问题确实是针对 dtrace/perl 的。