Perlアプリケーションのパフォーマンスを改善する必要があります。スロースポットを見つけるにはどうすればよいですか?
これは 公式perlfaq からの質問です。私たちは perlfaqをStack Overflowにインポートしています です。
(これは 公式のperlfaqの回答 からその後の編集を差し引いたものです)
Devel
名前空間には、Perlプログラムのプロファイリングに使用できるいくつかのモジュールがあります。 Devel :: DProf モジュールはPerlに付属しており、-d
スイッチを使用して呼び出すことができます。
$ Perl -d:DProf program.pl
DProf
でプログラムを実行すると、プロファイルデータを含むtmon.outファイルが取得されます。データを確認するには、Devel::DProf
に付属のdprofpp
プログラムを使用して、人間が読める形式のレポートに変換できます。
$ dprofpp
-p
をdprofpp
に切り替えることで、プロファイリングとレポートを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。
私は Devel :: NYTProf の使用に切り替えました。これは、最初はNYTimesの人々によって、Perlを組み合わせたすべての最良のプロファイリングです。
プログラムのパフォーマンスを向上させることができるように、スロースポットを見つける非常に簡単な方法があります random-pausing 。
基本的に、アイデアは、どの部分が遅いかを測定するのではなく、その遅い部分にそれをさらすことです。
デバッグフラグを指定してプログラムを実行します-d
、実行中に手動で中断し、コールスタック(T
)を表示します。 5や10のように、これを数回実行します。複数のスタックおよびに表示される、厳密には必要ではないステートメントを探します。それが責任を負う時間は、それを示すスタックのおよその割合です。
これにより、ホットスポットだけでなく、関数が高額に呼び出されている行も検出されます。プログラムがI/OまたはCPUにバインドされているかどうかは同じように機能し、マシンで他に何が起こっているかは関係ありません。
スピードアップできるものが見つからなくなるまで、複数回行うことができます。