なんだろうかと思ったら、どうやらこのブログをapache2+fcgid+rubyで動かしてるんだけど、そのrubyが無限増殖していた模様。それでメモリが足りなくなって怪現象が起きていたみたい。
fcgidの設定が腐っているのかと思い、プロセス数の上限などを設けるも効果なし。
cat /etc/apache2/mods-enabled/fcgid.conf <IfModule mod_fcgid.c> FcgidConnectTimeout 20 MaxRequestLen 15728640 FcgidMaxProcessesPerClass 10 FcgidMaxProcesses 10 FcgidProcessLifeTime 3600 <IfModule mod_mime.c> AddHandler fcgid-script .fcgi </IfModule> </IfModule>
よくよく調べたら以前はruby 1.8で動かしていたのを今回ruby 2.2で動かすにあたって、文字コード周りの問題を回避するために *0 rubyを起動するときにshell scriptを挟んでいたのが不味かったみたい。
まともに対処するのが面倒なので無理やりこんなことをして動かしてたんだけど、fcgidが管理するプロセスは起動したshell scriptだけで、そこからforkしたrubyの面倒は見ないと思われ野放しのrubyが際限なく増えてしまったというオチらしい。
#!/bin/sh export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 ruby -U index.frbrubyの前にexecを入れたら問題はそれから1ヶ月以上起きてないし、プロセスも設定以上には増えてない。
というしょっぱい思い出をふと思い出しました。
*0 : こういったスクリプト言語の互換性が無くなる問題はツラミしかないですな。使ってたライブラリも互換性なくなってたり。手軽さを求めてスクリプトを使ってたのになぜこんな目に遭うのか!