Devel::NYTProfでプロファイリング
http-engineをNYTProfを使ってプロファイリングしてみました。
HTTP::Engineの実行用のスクリプト
tools/profile.pl
use strict; use warnings; use HTTP::Engine; use IO::Scalar; my $engine = HTTP::Engine->new( interface => { module => 'CGI', args => { port => 9999, }, request_handler => sub { my $c = shift; $c->res->status(200); }, } ); $ENV{REMOTE_ADDR} = '127.0.0.1'; $ENV{REQUEST_METHOD} = 'GET'; $ENV{SERVER_PORT} = 80; tie *STDOUT, 'IO::Scalar', \my $out; $engine->run; untie *STDOUT;
tools/profile.sh
#!/bin/sh rm -rf nytprof rm nytprof.out perl -d:NYTProf -S ./tools/profile.pl . nytprofhtml open ./nytprof/index.html
これでprofilingして、結果のhtmlを開くところまでやってくれます。
メソッドの中のどの箇所にどれだけ時間がかかっているのかというのがわかるのはなかなかいいですね。ソースコードの脇にプロファイリング結果が表示されるのがかなりいいです。これはチューニングするときにかなり使えそうでね。
Devel::NYTProf::Apacheというモジュールもあるので、mod_perl applicationのprofilingにも使えそうです。
# tokuhiromさんがhttp-engineのtoolsディレクトリに入れているcoverage_test.shはいいなぁと思っていて、nytprofのスクリプトを作っていれてみました。