web-dev-qa-db-ja.com

Perlプログラムのプロファイルを作成するにはどうすればよいですか?

Perlアプリケーションのパフォーマンスを改善する必要があります。スロースポットを見つけるにはどうすればよいですか?


これは 公式perlfaq からの質問です。私たちは perlfaqをStack Overflowにインポートしています です。

38
perlfaq

(これは 公式のperlfaqの回答 からその後の編集を差し引いたものです)

Devel名前空間には、Perlプログラムのプロファイリングに使用できるいくつかのモジュールがあります。 Devel :: DProf モジュールはPerlに付属しており、-dスイッチを使用して呼び出すことができます。

$ Perl -d:DProf program.pl

DProfでプログラムを実行すると、プロファイルデータを含むtmon.outファイルが取得されます。データを確認するには、Devel::DProfに付属のdprofppプログラムを使用して、人間が読める形式のレポートに変換できます。

$ dprofpp

-pdprofppに切り替えることで、プロファイリングとレポートを1つのステップで実行することもできます。

$ dprofpp -p program.pl

Devel :: NYTProf (New York Times Profiler)は、ステートメントとサブルーチンの両方のプロファイリングを行います。これはCPANから入手でき、-dスイッチを使用して呼び出すこともできます。

$ Perl -d:NYTProf some_Perl.pl

DProfと同様に、レポートに変換できるプロファイル情報のデータベースを作成します。 nytprofhtmlコマンドは、データを Devel :: Cover レポートのようなHTMLレポートに変換します。

$ nytprofhtml

CPANには、同じ方法で呼び出すことができる他のプロファイラーがいくつかあります。また、Cを使用してコードスニペットを測定および比較することもできます。

プロファイリングの詳細については、Programming Perl、第20章、またはMastering Perlを参照してください。 -)、第5章。

perldebguts 特別な種類のプロファイラーを作成する必要がある場合は、カスタムデバッガーを作成するドキュメント。 brian d foyは、Perl Journal"Creating a Perl Debugger" 、および "Profiling Perlで "

Perl.comには、プロファイリングに関する2つの興味深い記事があります。SimonCozensによる "Profiling Perl" と、Frank Wilesによる "Debugging and Profiling mod_Perl Applications" です。

Randal L. Schwartzは、プロファイリングについて "Speeding up Your Perl Programs" forUnix Reviewand "Profilingテンプレートツールキットでオーバーライドを介して " forLinux Magazine

48
brian d foy

私は Devel :: NYTProf の使用に切り替えました。これは、最初はNYTimesの人々によって、Perlを組み合わせたすべての最良のプロファイリングです。

13
Randal Schwartz

プログラムのパフォーマンスを向上させることができるように、スロースポットを見つける非常に簡単な方法があります random-pausing

基本的に、アイデアは、どの部分が遅いかを測定するのではなく、その遅い部分にそれをさらすことです。

デバッグフラグを指定してプログラムを実行します-d、実行中に手動で中断し、コールスタック(T)を表示します。 5や10のように、これを数回実行します。複数のスタックおよびに表示される、厳密には必要ではないステートメントを探します。それが責任を負う時間は、それを示すスタックのおよその割合です。

これにより、ホットスポットだけでなく、関数が高額に呼び出されている行も検出されます。プログラムがI/OまたはCPUにバインドされているかどうかは同じように機能し、マシンで他に何が起こっているかは関係ありません。

スピードアップできるものが見つからなくなるまで、複数回行うことができます。

3
Mike Dunlavey