Apache::DProf。
前の職場でvmware上のCentOS に Apache::DProf 入れてた同僚さんがいて
なるほど、便利やね〜…と思いつつも試す機会がなかった。
が、再び今の現場でも「あったらいいのにねぇ」と思うタイミングがあったので
家の vmware に入れてみたメモ。訳あって apache1.3系です。
勿論、mod_perl 入り。
・Apache::DProf のインストール
いつものように「perl -MCPAN -e 'install Apache::DProf'」で入ります。
・httpd.conf に書き足した部分
SetHandler perl-script
PerlModule Apache::DProf
PerlModule Apache::Registry
PerlHandler Apache::Registry::handler
PerlSendHeader On
「PerlHandler Apache::Registry」を設定しているところに
「PerlModule Apache::DProf」を書き足しただけだと
[Mon Sep 1 01:59:43 2008] [error] Undefined subroutine &Apache::Registry::handler called.\n
…なんてエラーが出たりする事があるので、
「PerlModule Apache::Registry」「PerlHandler Apache::Registry::handler」と設定。
・tmon.out の保存先を設定
apache の logs ディレクトリ配下に dprof ディレクトリを作成して、
apache のUser/Group用に書き込み権限を与えておく。
・apache の再起動
例によって mod_perl 環境下では
「apachectl restart」やら「apachectl graceful」だとコケる可能性大なので
「apachectl stop」して ps -ef でプロセス確認してから
「apachectl start」がお勧め。
それから、Apache::DProfにトレースして欲しいスクリプトをブラウザーで叩き、
一度、apachectl stop すると、今叩いた分の tmon.out が
さっき作った dprof/PID/tmon.out として保存される模様。
一度 stop しないと保存されないのが結構ポイント。
ここを見て、やっとそれに気付いたのでしたorz
てな訳で、保存された tmon.out は例によって
dprofpp logs/PID/tmon.out などと打てば、
ダダーっといつもの表を表示してくれるのでして、
さらにいつものように dprpfpp -t で全通過メソッドも確認出来るのでした。便利ー。
[root@localhost dprof]# dprofpp 4825/tmon.outExporter::import has -3 unstacked calls in outer
Exporter::Heavy::heavy_export_ok_tags has 1 unstacked calls in outer
Exporter::export_ok_tags has -1 unstacked calls in outer
Exporter::export has -2 unstacked calls in outer
Exporter::Heavy::heavy_export has 5 unstacked calls in outer
Total Elapsed Time = 238.9550 Seconds
User+System Time = 0.545048 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
17.4 0.095 0.352 17 0.0056 0.0207 base::import
12.1 0.066 0.090 6 0.0109 0.0150 Ima::DBI::BEGIN
7.34 0.040 0.040 4 0.0100 0.0100 DynaLoader::bootstrap
7.16 0.039 0.044 7 0.0056 0.0063 Class::DBI::_require_class
3.67 0.020 0.020 1 0.0200 0.0200 DBD::mysql::db::_login
3.67 0.020 -0.000 2 0.0099 - Exporter::export
3.67 0.020 0.038 1 0.0196 0.0381 DBI::install_driver
3.67 0.020 0.019 7 0.0028 0.0027 IO::Handle::BEGIN
3.67 0.020 0.492 5 0.0039 0.0983 Apache::ROOT::cgi_2dbin::test_2ecgi::BEGIN
3.49 0.019 0.057 7 0.0028 0.0082 IO::File::BEGIN
3.30 0.018 0.147 20 0.0009 0.0074 Class::DBI::BEGIN
1.83 0.010 0.010 1 0.0100 0.0100 AutoLoader::import
1.83 0.010 0.010 1 0.0100 0.0100 warnings::register::import
1.83 0.010 0.010 4 0.0025 0.0025 XSLoader::load
1.83 0.010 0.010 2 0.0049 0.0049 Anigon::DBI::BEGIN
まだまだ試してない事いっぱいあるなー。
もっと勉強せなー。