2010-12-06 51 views

回答

37

(这是official perlfaq answer,减去任何后续编辑)

Devel命名空间有几个模块,你可以用它来 配置您的Perl程序。该Devel::DProf模块配备了Perl和您可以用-d开关调用它:

$ perl -d:DProf program.pl 

DProf下运行程序后,你会得到一个tmon.out文件 与分布数据。为了看一下数据,你可以使用随 Devel::DProfdprofpp程序把它变成一个 人类可读报告:

$ dprofpp 

你也可以做剖析,并在一个步骤与-p 开关报告到dprofpp

$ dprofpp -p program.pl 

Devel::NYTProf(纽约时报探查)同时做两语句和子程序剖析。您可通过CPAN,您还调用 它与-d开关:

$ perl -d:NYTProf some_perl.pl 

DProf,它创造的,你 可以变成报告的配置文件信息的数据库。该nytprofhtml命令将数据分成 类似Devel::Cover报告的HTML报告:

$ nytprofhtml 

CPAN有,你可以在同一 时尚调用其他几个剖析。您可能也有兴趣使用C to 度量和比较代码片段。

你可以阅读更多有关分析在的Perl编程,第20章, 或掌握的Perl,第5章

perldebguts文档中创建一个自定义的调试器,如果你需要创建 探查的一种特殊。 brian d foy描述了的Perl日记,"Creating a Perl Debugger""Profiling in Perl"的过程 。

Perl.com有两篇关于剖析的有趣文章:Simon Cozens的"Profiling Perl", 和Frank Wiles的"Debugging and Profiling mod_perl Applications"

Randal L.施瓦茨写关于"Speeding up Your Perl Programs"分析为Unix的审查"Profiling in Template Toolkit via Overriding"Linux杂志

3

有找到慢点,所以你可以提高你的程序的性能非常简单的方法 - random-pausing

基本上,这个想法是,而不是衡量,看看哪些部分是缓慢的,你让其缓慢将其暴露给你。

使用调试标志-d运行程序,并在程序运行时手动中断程序,并显示调用栈(T)。这样做几次,如5或10.查找出现在多个堆栈上的任何语句,这些语句不是严格必要的,因为它负责的时间大约是显示它的堆栈的百分比。

这不仅发现热点,而且还发现其中功能被称为昂贵的行。无论程序是I/O还是CPU绑定,它都能正常工作,并且与机器中的其他功能无关。

你可以做多次,直到你找不到可以加速的东西。

+1

虽然我承认这种技术将工作,这是非常高效的,容易出错不佳扩展到大的代码库,它不会帮助你决定是否更改真正帮助您的程序或只是转移周围的瓶颈。为了减少工作量,真正的轮廓运​​行将揭示更多细节,并且可能更具可重复性。 – 2010-12-08 18:32:21

+2

@ Ven'Tatsu:这是你所知道的,还是你想要想的?事实上,它非常高效,不易出错,在更大的代码基础下工作更好,找到真正的“瓶颈”,为您提供正确的细节,并且可根据需要重现。 [这里是更多的主题。](http://stackoverflow.com/questions/4387895/if-profiler-is-not-the-answer-what-other-choices-do-we-have/4390868#4390868) – 2010-12-08 19:11:08

9

我切换到使用Devel::NYTProf,这是所有最好的Perl剖析相结合,最初在纽约时报的乡亲。