有多个进程时如何使用 NYTProf

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于有多个进程时如何使用 NYTProf的主要内容,如果未能解决你的问题,请参考以下文章

分析和不分析时的 NYTProf 执行时间

使用 NYTProf 对 foswiki 进行剖析会导致剖析数据不完整

当有多个实例时如何与.net进程通信

如何在多个进程之间共享缓存?

如何在 Windows 上的多个进程上存储持久设置

如何使用进程运行多个命令