詰まった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クラスを変更できるようになってるから、コードを変更せずすぐに導入できる点もグッド。

by typester / at 2009-04-03T15:01:00 / perl / Comments(0)