5

まずexport PERL5OPT=-d:NYTProf、デバッグ オプションが子プロセスに継承されるように、コマンド ラインから実行します。次に、連絡先の Perl プログラムを起動します。フォークしてデーモン プロセスになり、別の Perl プログラムtable_managerの 9 つのインスタンスをフォーク/実行します。(exec は のようになりexec /path/to/perl /path/to/table_managerます。) この時点で、nytprof.out という 10 個または 11 個の新しいファイルが表示されます。んんん。予想どおり、今までフォークされたプロセスごとに 1 つ。

クライアントは、contactd which fork/ execs slaveに接続します。スレーブは、9 つ​​のテーブル マネージャーに接続し、クライアントからの要求を受け入れて、9 つのテーブル マネージャーに渡します。

通常のクライアント接続を実行した後、すべてのサーバー プロセスをシャットダウンしました。nytprofmergeを実行して、さまざまな nytprof.out をマージしますnnnnファイルをnytprof-merged.outにコピーしてから実行しnytprofhtml -f nytprof-merged.out --openます。

HTML レポートが開いたとき、連絡先以外は何も言及されていません。最上位のサブルーチンは、ほとんどが BEGIN ブロック、importAUTOLOAD ... 初期実行のものです。

これにより、NYTPROF(複数の nytprof.out ファイルに基づいて) フォークを通過しているが、何らかの理由で実行された Perl プログラムのプロファイルを継続していないと思います

MacOSX 10.8.2 で perl 5.16.1 と最新の Devel::NYTProf を実行しています。

私がしていないことに関する提案はありますか?

4

2 に答える 2

3

フォーク深度変数を -1 に設定できます。

http://search.cpan.org/~timb/Devel-NYTProf-4.25/lib/Devel/NYTProf.pm#forkdepth=N

フォークの深さ=N

プロファイリングされている perl プロセスが fork() を実行すると、子プロセスもプロファイリングされます。これを制御するには、forkdepth オプションを使用できます。forkdepth がゼロの場合、プロファイリングは子プロセスで無効になります。

forkdepth が 0 より大きい場合、子プロセスでプロファイリングが有効になり、そのプロセスの forkdepth 値が 1 減ります。

forkdepth が -1 (デフォルト) の場合、プロファイリングされる子の世代数に制限はありません。

よろしく、

于 2013-02-25T08:58:14.950 に答える