答案 0 :(得分:43)
(这是official perlfaq answer,减去任何后续修改)
Devel
命名空间有几个模块可供您使用
配置你的Perl程序。 Devel::DProf模块附带Perl,您可以使用-d
开关调用它:
$ perl -d:DProf program.pl
在DProf
下运行程序后,您将获得 tmon.out 文件
与个人资料数据。要查看数据,您可以将其转换为
带有dprofpp
程序的人类可读报告
Devel::DProf
:
$ dprofpp
您还可以使用-p
一步完成分析和报告
切换到dprofpp
:
$ dprofpp -p program.pl
Devel::NYTProf(New York Times Profiler)同时进行语句和子例程分析。它可以从CPAN获得,您也可以调用它
它与-d
开关:
$ perl -d:NYTProf some_perl.pl
与DProf
一样,它会创建您的个人资料信息数据库
可以变成报告。 nytprofhtml
命令将数据转换为
与Devel::Cover报告类似的HTML报告:
$ nytprofhtml
CPAN还有其他几个可以在同一个中调用的分析器 时尚。您可能也有兴趣使用C语言 衡量和比较代码片段。
您可以在 Programming Perl 中阅读有关分析的更多信息,第20章, 或掌握Perl ,第5章。
如果需要,perldebguts文档创建自定义调试器 创建一种特殊的分析器。 brian d foy描述了这个过程 在 Perl期刊,"Creating a Perl Debugger"和"Profiling in Perl"。
Perl.com有两篇关于性能分析的有趣文章:"Profiling Perl", 作者:Simon Cozens和"Debugging and Profiling mod_perl Applications"作者:Frank Wiles。
Randal L. Schwartz写了关于 Unix Review 的"Speeding up Your Perl Programs"和 Linux Magazine 的"Profiling in Template Toolkit via Overriding"的分析。
答案 1 :(得分:12)
我已经切换到使用Devel::NYTProf,这是Perl组合的最佳分析,最初是纽约时报的人们。
答案 2 :(得分:3)
有一种非常简单的方法可以找到慢点,以便提高程序的效果 - random-pausing。
基本上,这个想法是,而不是衡量什么部分是缓慢的,你让它的缓慢暴露给你。
使用调试标志-d
运行程序,并在程序运行时,手动中断,并显示调用堆栈(T
)。这样做几次,比如5或10.查找出现在多个堆栈上的任何语句和并非绝对必要,因为它负责的时间大致是堆栈的百分比表明它。
这不仅可以找到热点,还可以找到昂贵地调用函数的行。无论程序是I / O还是CPU绑定,它都可以正常工作,并且机器上的其他内容无关紧要。
你可以做多次,直到找不到任何可以加速的东西。