【问题标题】:How to use NYTProf when there are multiple processes有多个进程时如何使用 NYTProf
【发布时间】:2015-10-15 15:27:26
【问题描述】:

在我的应用程序中,我有多个进程。最初我通过运行 .pl 文件启动一个 Perl 进程,然后它又调用另外两个 .pl 脚本创建 2 个新进程。 如何使用 Profile 这样的代码。 我做了 NYTProf,合并结果并用 html 打开,但所有与函数相关的分析信息都丢失了。 描述此类应用程序的信息会有所帮助吗?

【问题讨论】:

    标签: perl devel-nytprof


    【解决方案1】:

    PROFILING section of the documentation 举个例子:

    PERL5OPT=-d:NYTProf

    当您无法更改用于运行要分析的脚本的 perl 命令行时,这也非常方便。通常,您需要启用“addpid=1”选项以确保任何对 perl 的嵌套调用都不会覆盖配置文件。

    addpid option 的文档解释说:

    将当前进程 ID 附加到文件名的末尾。这避免了并发或连续的进程覆盖同一文件。如果在分析期间检测到分叉,则子进程将自动将进程 ID 添加到文件名中。

    您说您“合并了结果”。我想你的意思是使用nytprofmerge。这应该只用于合并由完全相同的源代码生成的多个结果文件。例如,通过分叉创建子进程的进程,或多次运行未更改的脚本。在您的情况下,您正在从不同的脚本生成配置文件,因此每个配置文件输出都应该用于生成单独的报告而无需合并。

    您说“缺少与功能相关的所有分析信息”。我需要更多关于您如何分析代码和生成报告的详细信息,然后才能为您提供帮助。

    【讨论】:

      【解决方案2】:

      添加到answer by @TimBunce,这是我如何使用addpid 生成报告的分步说明(在bash 中测试,使用Devel::NYTProf 6.06)。

      就我而言,我多次运行相同的代码。由于这是针对这种情况的 Google 结果顶部出现的问题,因此我添加此答案以防它对未来的读者有所帮助。

      # Clean any old output
      rm -rf nytprof*
      
      # Run the program with addpid=1.
      #   `{1..10}` => ten runs
      #   `foo.pl` => whatever your program name and other Perl options are
      # This makes files `nytprof.out.####`, where `####` is the PID.
      (export NYTPROF=addpid=1 ; for i in {1..10} ; do perl -d:NYTProf foo.pl ; done ; )    
      
      # Merge the result files.  This produces `nytprof-merged.out`.
      nytprofmerge -v nytprof.out.*
      
      # Make the HTML report into `nytprof/`
      nytprofhtml -f nytprof-merged.out
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-17
        • 2014-02-02
        • 2012-06-14
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-31
        相关资源
        最近更新 更多