我可以在OS X 10.5上使用dtrace来确定哪个perl subs导致了大部分内存分配?

ast*_*ron 9 perl dtrace

我们有一个非常棒的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时分配的内存总量.

关于如何做到这一点的任何想法?

ast*_*ron 2

问题的答案是“是”。dtrace 可用于分析 perl 进程中的内存使用情况。

这段代码:

https://github.com/astletron/perl-dtrace-malloc/blob/master/perl-malloc-total-bytes-by-sub.d

跟踪程序中每个子程序的调用和返回之间内存使用量的增加情况。作为一个额外的好处,dtrace 似乎会为您对输出进行排序(至少在 OS X 上)。凉爽的。

感谢大家的参与。我自己回答了这个问题,因为这个问题确实是针对 dtrace/perl 的。