如果有多个进程,如何使用NYTProf

时间:2015-10-15 15:27:27

标签: perl devel-nytprof

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

2 个答案:

答案 0 :(得分:5)

PROFILING section of the documentation举了一个例子:

  

PERL5OPT = -d:NYTProf

     

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

addpid option的文档说明:

  

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

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

您说"与功能相关的所有分析信息都缺失了#34;。在我能帮助您之前,我需要了解有关您如何分析代码并生成报告的更多信息。

答案 1 :(得分:0)

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