CGIでのperlプロファイリングを簡単に

昔書いたperlCGIが、データが増えてくると重いことがわかって、まあだいたい重い場所は見当がついてるけど、一応プロファイリングして確認しておこうと思いまして、perlのプロファイラを調べてみた。Devel::DProf と、Devel::Profile がよく使われてるみたい。

Devel::DProf http://search.cpan.org/~ilyaz/DProf-19990108/DProf.pm
Devel::Profile http://search.cpan.org/~jaw/Devel-Profile-1.05/Profile.pm

Dprofは、結果の表示に別コマンドが必要だけど、Profileは直接読みやすいフォーマットで出力してくれるみたいだから、Devel::Profileがいいな。

使い方は、
$ perl -d:Profile foo.pl
ってやるだけで、カレントディレクトリに prof.out っていうファイルが出力されます。

ただ、これだと、コマンドラインでは使えるけど、CGIのプロファイリングが出来ない。
Apache::DProf http://search.cpan.org/~FWILES/Apache-DB-0.10/lib/Apache/DProf.pm
はなんか準備が面倒だしなあ、、、と思ってたら、下記の記事を発見。
http://metatoys.org/propella/tips/Devel_DProf.html
そうか!perlの先頭行のパスの指定にオプションつけちゃえばいいんだ!
記事ではDProfでしたが、Profileでも同じことが出来ました(当然ですが)。

Windows上で、Apache+ActivePerlでテストするときは、先頭行は、
#!C:/perl/bin/perl
と書かないといけないので、そこにオプションをつけて、
#!C:/perl/bin/perl -d:Profile
としました。