[perl] リクエスト処理前後のメモリ使用量を調べる Plack::Middleware::GTop::ProcMem を書いてみた

https://github.com/fujiwara/Plack-Middleware-GTop-ProcMem

Plack アプリケーションが、どれかの処理でメモリを使いすぎてプロセスが太るらしい。でもそれがどのURLを処理したときなのかが分からない、という場合にこんな Middleware を使えば調べられるかなというので書いてみた。

GTop.pm を使っているので、libgtop が使える環境でないと動きません。

使う側は callback に app 処理開始前後の GTop::ProcMem オブジェクトが渡ってくるので、それを参照してログに吐くなり、よしなにする感じで。

use Plack::Builder;
use Plack::Request;
use Log::Minimal;
builder {
    enable 'GTop::ProcMem', callback => sub {
        my ($env, $res, $before, $after) = @_;
        my $diff = $after->rss - $before->rss;
        warnf "%s RSS diff %d", $env->{REQUEST_URI}, $diff;
    };
    $app;
};

専用の Middleware にするほどのものでもない気もしますが、どんなもんでしょうか。