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 にするほどのものでもない気もしますが、どんなもんでしょうか。