20 March 2014

NYTProf でプロファイリング

実行時に -d:NYTProf オプションを追加してあげれば良い。

plackup などなにかコマンドをかませている場合は、こういう感じにすればいいはず。

carton exec -- perl -d:NYTProf -S plackup app.psgi

この場合 NYTProf の設定は NYTPROF 環境変数で渡す。例えば、

NYTPROF='file=/tmp/nytprof.out'

とすれば、結果の出力先を変えられる。

またオプションではなくコード中でやるには、DB::enable_profileDB::disable_profile を使えば良い。

plack アプリの場合、psgi ファイルなどで、次のようにしてあげればよい。

use Devel::NYTProf;

my $app = sub {
    my $env = shift;
    DB::enable_profile('/tmp/nytprof.out');
    my $req = Plack::Request($env);
    my $app = YourApp->new(req => $req);
    my $res = $app->run;
    DB::disable_profile();
    return $res;
};