首先,我export PERL5OPT=-d:NYTProf
从命令行开始,以便我的调试选项将被子进程继承。然后我启动我的 Perl 程序contactd。它 fork 成为一个守护进程,然后 fork/execs 另一个 Perl 程序table_manager的九个实例。(exec 看起来像exec /path/to/perl /path/to/table_manager
.)此时我可以看到 10 或 11 个名为nytprof.out 的新文件。nnnn ; 正如预期的那样,到目前为止已经分叉的每个进程都有一个。
客户端连接到被联系的哪个 fork/execs slave ,后者又连接到九个表管理器并接受来自客户端的请求并将它们传递给九个表管理器。
运行典型的客户端连接后,我关闭了所有服务器进程。我运行nytprofmerge来合并各种nytprof.out。nnnn文件到nytprof-merged.out中,然后运行nytprofhtml -f nytprof-merged.out --open
.
当 HTML 报告打开时,我看到除了contactd 之外没有提及任何内容。最上面的子程序主要是 BEGIN 块、import、AUTOLOAD ... 早期执行的东西。
这让我认为 NYTPROF正在经历一个分叉(基于多个 nytprof.out 文件),但由于某种原因没有继续分析exec的 Perl 程序。
我在 MacOSX 10.8.2 中运行 perl 5.16.1 和最新的 Devel::NYTProf。
关于我没有做什么的任何建议?