古いおいぬま日報(不定期)のtDiaryなのですが、Ubuntu 8.10にしてからどうも調子が悪くて悩んでいます(*1)。というのは、tDiaryをapacheのmod_fcgid で動かしているのですが、CPU使用率100%近くなっているFastCGIのrubyプロセスがずっと残りっぱなしになっているようなのです。おかげで無駄に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モジュールは便利でした。