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なども見れます。