Apache2::Statusを使ってみた
mod_perlでどのくらいメモリー使われてるかとか調べたかったのでApache2::Statusを使ってみた。
Shibuya.pmのLTにも含めようと思ったけど5分に押し込めるのは無理なのでここで公開。
テスト対象としてCGI::Applicationで
package HelloWorld; use strict; use warnings; use base 'CGI::Application'; sub setup { my $self = shift; $self->start_mode('index'); $self->run_modes( ['index']); } sub index { "HelloWorld"; } 1;
runスクリプトとして
#!/usr/bin/perl use strict; use warnings; use lib './lib'; use HelloWorld; HelloWorld->new->run;
みたいなのを作ります。
で、httpd.confに
PerlSwitches -I/home/hide/public_html/bench/modperl/cgi-app/lib PerlModule HelloWorld <Location /~hide/bench/modperl> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI </Location> <Location /~hide/bench/modperl/cgi-app/run> SetHandler perl-script PerlHandler "sub { HelloWorld->new()->run();}" </Location>
を追加して
- http://localhost/~hide/bench/modperl/cgi-app/helloworld.cgiだとModPerl::Registry
- http://localhost/~hide/bench/modperl/cgi-app/runだとhandler
経由で動くようにして両者の比較をします。
ここからApache2::Statusの設定です。
まず、MemoryUsageを見るためにcpanコマンドでB::TerseSizeをインストールします。
httpd.confに
<Location /perl-status> SetHandler modperl PerlOptions +GlobalRequest PerlResponseHandler Apache2::Status </Location> PerlSetVar StatusOptionsAll On
を追加します。
httpdをリスタートしてhttp://localhost/perl-statusを開くと
こんなメニューが開きます。
で、
- http://localhost/~hide/bench/modperl/cgi-app/helloworld.cgi
- http://localhost/~hide/bench/modperl/cgi-app/run
それぞれ一回づつ走らせてコンパイル/ロードをします。
Apache2::Statusのメニューから[Compiled Registry Scripts]->[ModPerl::ROOT::ModPerl::Registry::home_hide_public_html_bench_modperl_cgi_2dapp_helloworld_2ecgi::handler]->[MemoryUsage]でModPerl::Registry下で走るhelloworld.cgiの情報が表示されます。
こんな感じ。
同様に[Loaded Modules]->[HelloWorld]->[MemoryUsage]でhandler経由の情報が表示されます。
こんな感じ。
他にもMemoryUsageだけじゃなくOP Treeの表示やDeparseなども見れます。