以前も、Devel::NYTProf::Apache + mod_perl2 で同様のことを行っていますが、今回は、Devel::NYTProf + plack(psgi, starlet)版です。 http://end0tknr.hateblo.jp/entry/20120907/1347015223
Devel::NYTProfは、元々、処理の遅い部分を見つける為のプロファイラの為、Devel::Coverのように、きちんとカバレッジ値は表示できませんが、Devel::Coverをplack下で動作させる方法が分かりませんでしたので、とりあえず、次のようにしました。
といっても、gihyo.jp のまんまです。 http://gihyo.jp/dev/serial/01/perl-hackers-hub/001702
STEP1/2 - require Devel::NYTProf 等の記載
*.psgiファイル(Amon2であれば、$AppName/script/$app-name-server )に対し、次のように記載します。
#!perl use strict; : use File::Path (); use POSIX::AtFork qw/:all/; my @opts = qw( addpid=1 start=no sigexit=int forkdepth=0 file=/home/endo/tmp/nytprof.out ); $ENV{"NYTPROF"} = join ":", @opts; require Devel::NYTProf; pthread_atfork( undef, undef, sub { DB::enable_profile() if $$ % 1 == 0; }, ); my $app = builder { :
STEP2/2 - nytprof.out.* のマージとhtmlの作成
以下のように実行し、作成されたindex.htmlを見ればOK。何となく、処理が通過した行を確認できます。
$ cd /home/endo/tmp $ ls nytprof.out.* $ nytprofmerge nytprof.out.* $ nytprofhtml --file=nytprof-merged.out $ ls -l nytprof/index.html
その他 - Plack::Middleware::Profiler::NYTProf でも可能かも知れませんが...
*.psgi に以下のように記載して、動くようには見えましたが...
「Plack::Middleware::Profiler::NYTProf はぶっこわれてるそうなので、つかわないのがいいとおもいます。」という記事があったので、利用していません。
my $app = builder { my $conf = Ean->load_config(); enable 'Plack::Middleware::Static', path => qr{^(?:/static/)}, root => File::Spec->catdir(dirname(__FILE__), '..'); : enable 'Profiler::NYTProf', enable_profile => sub { $$ % 1 == 0 }, env_nytprof => 'start=no:addpid=0:file=/dev/null', profiling_result_dir => sub { '/home/endo/tmp/ean_nytpro_file' }, enable_reporting => 1, nytprofhtml_path => '/usr/local/bin/nytprofhtml'; Ean::Web->to_app(); };