詰まったFCGIプロセスを見つける方法
package FCGI::ProcManager::Debug; use strict; use warnings; use base qw/FCGI::ProcManager/;
sub pm_manage {
my $res = shift->SUPER::pm_manage(@_);
# manager does not return pm_manage, so below code should run in server only
$0 = 'perl-fcgi (waiting)';
$res;
}
sub pm_pre_dispatch {
$0 = sprintf('perl-fcgi (started %s)', scalar localtime);
shift->SUPER::pm_pre_dispatch(@_);
}
sub pm_post_dispatch {
$0 = 'perl-fcgi (waiting)';
shift->SUPER::pm_pre_dispatch(@_);
}
1;
こんな感じの ProcManager
のサブクラスを作り、これを代わりに使用すると、psコマンドでperlプロセスが詰まってないか確認することができるようになる。
プロセスが待機中の時は
perl-fcgi (waiting)
実行中の場合は
perl-fcgi (started Fri Apr 3 14:39:25 2009)
とスクリプト実行開始時間がでるので、それを元に探せばいい。$ENV{PATH_INFO}
等も表示させるともっと親切かも。
Catalyst のアプリの場合、
./script/myapp_fastcgi.pl -manager FCGI::ProcManager::Debug
等とすると使用するmanagerクラスを変更できるようになってるから、コードを変更せずすぐに導入できる点もグッド。