【发布时间】:2013-02-25 02:22:33
【问题描述】:
首先我从命令行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 的新文件;正如预期的那样,对于到目前为止已经分叉的每个进程都有一个。
客户端连接到 contactd,它分叉/执行 slave,后者又连接到九个表管理器并接受来自客户端的请求并将它们传递给九个表管理器.
运行典型的客户端连接后,我关闭了所有服务器进程。我运行 nytprofmerge 将各种 nytprof.out.nnnn 文件合并到 nytprof-merged.out,然后运行nytprofhtml -f nytprof-merged.out --open。
当 HTML 报告打开时,我看到除了 contactd 之外没有提及任何内容。最上面的子程序主要是 BEGIN 块、import、AUTOLOAD ... 早期执行的东西。
这让我认为 NYTPROF 正在跨越一个分支(基于多个 nytprof.out 文件),但由于某种原因没有继续分析 exec 'ed Perl 程序。
我在 MacOSX 10.8.2 中运行 perl 5.16.1 和最新的 Devel::NYTProf。
关于我没有做什么的任何建议?
【问题讨论】:
标签: perl exec fork devel-nytprof