首先,我在命令行中输入export PERL5OPT=-d:NYTProf
,以便我的调试选项将被子进程继承。然后我启动我的Perl程序联系。它分叉成为守护进程,然后分叉/执行另一个Perl程序table_manager的九个实例。 (执行程序看起来像exec /path/to/perl /path/to/table_manager
。)此时,我可以看到10或11个名为nytprof.out.nnnn的新文件。如预期的那样,针对现在已经分叉的每个过程一个。
客户端连接到联系的哪个fork / execs从属服务器,后者又连接到九个表管理器并接受来自客户端的请求并将它们传递给九个表管理器。
运行典型的客户端连接后,我关闭了所有服务器进程。我运行nytprofmerge将各种nytprof.out.nnnn文件合并到nytprof-merged.out中,然后运行nytprofhtml -f nytprof-merged.out --open
。
打开HTML报告时,除了联系我,我什么都没有提及。顶部子例程主要是BEGIN块,import,AUTOLOAD ...早期执行的东西。
这使我认为NYTPROF跨越了一个分支(基于多个nytprof.out文件),但是由于某种原因,它没有继续描述执行的Perl程序。
我正在MacOSX 10.8.2中运行perl 5.16.1和最新的Devel :: NYTProf。
关于我还没有做的任何建议吗?
最佳答案
您可以将fork depth变量设置为-1:
http://search.cpan.org/~timb/Devel-NYTProf-4.25/lib/Devel/NYTProf.pm#forkdepth=N
forkdepth = N
当正在分析的Perl进程执行fork()时,子进程
过程也进行了分析。 forkdepth选项可用于控制
这个。如果forkdepth为零,则将在
子进程。
如果forkdepth大于零,则将在
子进程和该进程中的forkdepth值是
减一。
如果forkdepth为-1(默认值),则数量没有限制
被描述的几代儿童。
问候,