我需要提高我的Perl应用程序的性能。我怎样才能找到慢点?如何分析我的Perl程序?
这是来自official perlfaq的问题。我们是importing the perlfaq to Stack Overflow。
我需要提高我的Perl应用程序的性能。我怎样才能找到慢点?如何分析我的Perl程序?
这是来自official perlfaq的问题。我们是importing the perlfaq to Stack Overflow。
(这是official perlfaq answer,减去任何后续编辑)
的Devel
命名空间有几个模块,你可以用它来 配置您的Perl程序。该Devel::DProf模块配备了Perl和您可以用-d
开关调用它:
$ perl -d:DProf program.pl
DProf
下运行程序后,你会得到一个tmon.out文件 与分布数据。为了看一下数据,你可以使用随 Devel::DProf
的dprofpp
程序把它变成一个 人类可读报告:
$ 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杂志。
有找到慢点,所以你可以提高你的程序的性能非常简单的方法 - random-pausing。
基本上,这个想法是,而不是衡量,看看哪些部分是缓慢的,你让其缓慢将其暴露给你。
使用调试标志-d
运行程序,并在程序运行时手动中断程序,并显示调用栈(T
)。这样做几次,如5或10.查找出现在多个堆栈和上的任何语句,这些语句不是严格必要的,因为它负责的时间大约是显示它的堆栈的百分比。
这不仅发现热点,而且还发现其中功能被称为昂贵的行。无论程序是I/O还是CPU绑定,它都能正常工作,并且与机器中的其他功能无关。
你可以做多次,直到你找不到可以加速的东西。
我切换到使用Devel::NYTProf,这是所有最好的Perl剖析相结合,最初在纽约时报的乡亲。
虽然我承认这种技术将工作,这是非常高效的,容易出错不佳扩展到大的代码库,它不会帮助你决定是否更改真正帮助您的程序或只是转移周围的瓶颈。为了减少工作量,真正的轮廓运行将揭示更多细节,并且可能更具可重复性。 – 2010-12-08 18:32:21
@ 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