2013-02-25 2 views
5

最初にI export PERL5OPT=-d:NYTProfコマンドラインからデバッグオプションを子プロセスが継承するようにします。それから私はPerlプログラムcontactdを立ち上げます。これはデーモンプロセスとなり、別のPerlプログラムの9つのインスタンスをfork/execする。table_manager。 (execはexec /path/to/perl /path/to/table_managerのようになります。)この時点で、nytprof.outという10個または11個の新しいファイルが表示されます。 nnnn;これまで予想通りにフォークアップされた各プロセスの1つです。フォーク/ execsのプログラムでDevel :: NYTProfを使用する

クライアントが順番に9台のマネージャーに接続し、クライアントからの要求を受け付け、9台のマネージャーに渡しcontactdフォーク/幹部スレーブ、に接続します。

典型的なクライアント接続を実行した後、私はすべてのサーバープロセスをシャットダウンします。私はさまざまなnytprof.outをマージするためにnytprofmergeを実行します。 nnnnファイルをnytprof-merged.outに入力し、nytprofhtml -f nytprof-merged.out --openを実行します。

HTMLレポートが開くと、という連絡先以外は何も表示されません。上のサブルーチンはほとんどがBEGINブロックで、インポート,AUTOLOAD ...早期実行のものです。

これはNYTPROF は(複数nytprof.outファイルに基づいて)フォーク渡って行くが、何らかの理由でのexecのプロファイルを継続していないされていることを考えるように私をリードには「Perlプログラムを編。

私はPerl 5.16.1と最新のDevel :: NYTProfをMacOSX 10.8.2で動かしています。

私は何をしていないのですか?

答えて

3

あなたが-1にフォーク深度変数を設定することができ:

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

forkdepth = N

プロファイルされているPerlのプロセスがフォークを実行()子 プロセスでありますまた、プロファイルされます。 forkdepthオプションを使用して を制御することができます。 forkdepthが0の場合、子プロセスの ではプロファイリングが無効になります。

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

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

よろしく、

+0

私はこれを仕事で、別のOS(CentOS)で試してみなければなりませんでしたが、いくつかの違いがあります。私は明示的に* addpid = 1 *オプションを指定してNYTPROFにpidを.outファイルに追加させなければなりませんでした。 (これは私のOSX環境で自動的に起こったようです)そして、forkdepth = -1(デフォルトでは、とにかく)を指定せずに、私が望むものすべてを手に入れました。ですから今夜これをOSXで試してみて、addpidを指定するのが答えか、forkdepthが違いを生むかどうか確認してください。 – Chap

0

AFAIUあなたはマージする最初のnytprof.outを忘れてしまいました。 それをマージするか、addpid = 1オプションを渡して、最初のエントリでも常にnytprof.out.nnnnを得ることができます。

関連する問題