有多个进程时如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章