oinume journal

Scratchpad of what I learned

Apache + mod_fcgid + tDiaryでrubyプロセスが残りっぱなし

古いおいぬま日報(不定期)tDiaryなのですが、Ubuntu 8.10にしてからどうも調子が悪くて悩んでいます(*1)。というのは、tDiaryapacheのmod_fcgid で動かしているのですが、CPU使用率100%近くなっているFastCGIrubyプロセスがずっと残りっぱなしになっているようなのです。おかげで無駄にCPUリソースを食って非エコ状態になっています。

*1) 環境はUbuntu 8.10 + Apache 2.2.11 + mod_fcgid 2.2 + tDiary 2.2.0

 

apacheのエラーログには

 

[Mon Feb 16 20:17:26 2009] [notice] mod_fcgid: process /home/kazuhiro/www/diary/htdocs/index.fcgi(30333) exit(communication error), get stop signal 9

 

と何やらあやしげなログが出ているのですが、なぜ communication errorになるのかさっぱりわかりません。

 

該当プロセスをkillすればCPUリソース使い過ぎな状態は回避できるので、10分以上経ったrubyプロセスを強制的にkillするスクリプトをでっち上げてcronで動かすように。

 

#!/usr/local/bin/perl

 

# $ sudo aptitude install libproc-processtable-perl

use strict;

use Proc::ProcessTable;

 

my $pt = Proc::ProcessTable->new('cache_ttys' => 1);

for my $p (@{ $pt->table }) {

if ($p->cmndline =~ /^ruby.+index.fcgi/) {

my $elapsed = time() - $p->start;

if ($elapsed > 60 * 10) {

$p->kill(9);

print sprintf "%s (%s) killed!n", $p->pid, $p->fname;

}

}

}

 

 

mod_fcgidじゃなくてmod_fastcgiにすれば改善しそうな気もしますが、もうちょっと切羽詰まってから試してみようと思います。それにしてProc::ProcessTableモジュールは便利でした。