Hatena::Groupsubtech

名称未設定♥

 | 

2009-03-08

Perlで、占有しているメモリ量をpackage毎に知る方法

23:37 |  Perlで、占有しているメモリ量をpackage毎に知る方法 - 名称未設定♥ を含むブックマーク はてなブックマーク -  Perlで、占有しているメモリ量をpackage毎に知る方法 - 名称未設定♥

Apache2::Status では、条件が揃えば package 毎に喰ってるメモリ量を知ることができます。

StatusTerseSizeMainSummary

With this option On and the B::TerseSize module installed, a "Memory Usage" will be added to the Apache2::Status main menu. This option is disabled by default, as it can be rather cpu intensive to summarize memory usage for the entire server. It is strongly suggested that this option only be used with a development server running in -X mode, as the results will be cached.

mod_perl: Apache2::Status - Embedded interpreter status information

mod_perl環境、普通のスクリプトとか、Perlで書いたdaemonでも使えるといいなと思ったので、ソースみてコピペってみました。

use B::TerseSize;
use Devel::Symdump;

my $stab = Devel::Symdump->rnew("main");
my %size;
for my $package ("main", $stab->packages) {
    my($subs, $opcount, $opsize) = B::TerseSize::package_size($package);
    $size{$package} = $opsize;
}
for my $package (sort {$size{$b}<=>$size{$a}} keys %size) {
    printf "%-24s %8d [KB]\n", $package, $size{$package}/1024;
}

ENDブロックでくるんでスクリプトが終了するときにサマリを出力するようにしたり、シグナルハンドラで出力するようにするといいんじゃないかと思います。

see also

トラックバック - http://subtech.g.hatena.ne.jp/hirose31/20090308
 |