Cha*_*hap 5 perl fork exec devel-nytprof
首先我export PERL5OPT=-d:NYTProf从命令行,以便我的调试选项将由子进程继承.然后我启动我的Perl程序联系.它分叉成为一个守护进程,然后fork/execs另一个Perl程序的九个实例table_manager.(exec看起来像exec /path/to/perl /path/to/table_manager.)此时我可以看到10或11个名为nytprof.out的新文件.nnnn ; 正如预期的那样,现在已经分叉的每个进程都有一个.
客户端连接到contactd fork/execs slave,后者又连接到九个表管理器并接受来自客户端的请求并将它们传递给九个表管理器.
运行典型的客户端连接后,我关闭所有服务器进程.我运行nytprofmerge来合并各种nytprof.out.将nnnn文件导入nytprof-merged.out,然后运行nytprofhtml -f nytprof-merged.out --open.
当HTML报告打开时,除了联系之外我什么也没看到.顶级子程序主要是BEGIN块,导入,AUTOLOAD ......早期执行的东西.
这使我觉得NYTPROF 是跨fork(基于多个nytprof.out文件)去,但由于某种原因不能继续来剖析EXEC "编Perl程序.
我在MacOSX 10.8.2中运行perl 5.16.1和最新的Devel :: NYTProf.
关于我没做过的任何建议?
小智 3
您可以将分叉深度变量设置为 -1:
http://search.cpan.org/~timb/Devel-NYTProf-4.25/lib/Devel/NYTProf.pm#forkdepth=N
叉深=N
当正在分析的 Perl 进程执行 fork() 时,子进程也会被分析。forkdepth 选项可用于控制这一点。如果 forkdepth 为零,则将在子进程中禁用分析。
如果 forkDepth 大于零,则将在子进程中启用分析,并且该进程中的 ForkDepth 值会减 1。
如果 forkdepth 为 -1(默认值),则分析的子代数量没有限制。
问候,