【问题标题】:How do I profile my Perl programs?如何配置我的 Perl 程序?
【发布时间】:2011-05-21 06:42:29
【问题描述】:

我需要提高我的 Perl 应用程序的性能。如何找到慢点?


这是来自official perlfaq 的问题。我们是importing the perlfaq to Stack Overflow

【问题讨论】:

标签: perl profiling


【解决方案1】:

我已经转而使用 Devel::NYTProf,这是 Perl 组合中最好的配置文件,最初由 NYTimes 的人提供。

【讨论】:

  • 谢谢兰德尔! (我知道这是一个旧帖子。最初错过了它)。 Tim Bunce 已经维护了一段时间。
【解决方案2】:

(这是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 来 测量和比较代码 sn-ps。

您可以在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" 中写了关于性能分析的文章。

【讨论】:

    【解决方案3】:

    有一种非常简单的方法可以找到慢点,这样您就可以提高程序的性能 - random-pausing

    基本上,这个想法是,与其衡量看看哪个部分慢,不如让其缓慢暴露给您。

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

    这不仅可以找到热点,还可以找到函数调用成本高昂的行。无论程序是 I/O 还是 CPU 密集型,它都能正常工作,而且机器中发生的其他事情都无关紧要。

    你可以做不止一次,直到你找不到任何可以加速的东西。

    【讨论】:

    • 虽然我承认这种技术会起作用,但它非常高效,容易出错,无法很好地扩展到大型代码库,并且它无法帮助您确定更改是否真的有助于您的程序或只是改变周围的瓶颈。真正的配置文件运行会以更少的工作量显示更多的细节,并且可能更具有可重复性。
    • @Ven'Tatsu:这是你所知道的,还是你可能想的?事实上,它非常高效,不易出错,在更大的代码库中工作得更好,找到真正的“瓶颈”,为您提供恰到好处的细节,并且在必要时具有可重复性。 Here's more on the subject.
    • 我怀疑这对 Perl 程序是否能很好地工作。至少不如 C 语言那么好。除了使用Devel::NYTProfperl -d:NYTProf some_perl.pl 运行之外,还可以生成非常漂亮的html 页面,易于浏览。
    • @Brad:怀疑是好事,从我对 NYTProf 的阅读中,我看到了好东西,比如通过代码行报告,以及使用挂钟时间。我没有看到它显示百分比时间,但也许我错过了它。 Html 页面很漂亮,我敢肯定,但真正重要的是它告诉你什么。如果您可以详细检查一个有代表性的调用堆栈,您可以查看那段时间是否没有得到充分利用,而这些就是调优的金块。 Measurements are less important.
    • @Mike Dunlavey:“在它运行时,手动中断它”。怎么手动中断呢?我尝试在 Windows CMD.EXE 和 Cygwin 中使用无限循环“perl -de”while (1) {}“”,然后是“c”。在 Cygwin 中 Ctrl+Z 停止了无限循环(或者更确切地说,执行),但这是针对整个 perl 进程,而不是调试器。
    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2011-01-06
    • 2011-01-13
    • 2011-04-21
    • 2017-08-13
    相关资源
    最近更新 更多