五月雨不調

This entry was posted by on Tuesday, 17 July, 2007

SF系日記更新時刻Rおよび
関数的なアンテナの閲覧者の皆さまへ。

えーと、サーバの ruby のバージョンを上げたら唐突にアンテナのプログラムが止まるようになりまして、さっきまで復旧作業してました。ちなみにどうなるかというと、

>

/usr/local/lib/ruby/1.8/time.rb:453: [BUG] queue 0xa558980 freed with live thread(s) [#<Thread:0x86d90f4 run>, #<Thread:0x86d90f4 run>, #<Thread:0x86d90f4 run>, #<Thread:0x86d90f4 run>, #<Thread:0x86d90f4 run>, #<Thread:0x86d90f4 run>, #<Thhread:0x86d90f4 run>] waiting

こんな感じでした。 [BUG] かよ。

現在なんとか復旧しましたが、そういうわけで最新更新時刻はそれ以前と断絶が生じている模様。まあ、そのうち落ち着くと思います。(→トラブル前のデータを持ってきたら断絶は直りました)

てことで以下は詳しい人向けの話題。

で、どうなったかというと、ご覧のようにスレッドまわりのおかしなことでしたということで –single-thread で動かしなおしたらとりあえずなんとかなった、ということなんですが原因は実はいまいちよくわかっていません。

現象を見ていると、どうやら上のバグが発生する直前は、あらゆるホストが host not known になるようなんですね。ようは名前が引けていないと。五月雨は(single-thread でなければ) resolve を ruby レベルでやっている。これは何故かというと、確か akr さんのるびまのインタビューか何かで言ってたけど、 ruby レベルでマルチスレッドになっても gethostbyname とかが ruby 全体を止めてしまうから、という話だったような。で、どうもそこのところに問題がありそうだ、という印象なのですが。

アンテナがチェックするページはいっぱいあって、どこかのタイミングで resolv がコケるとあとはガガガッとドミノ倒しのように、後のページはみんなだめになって、どっかで ruby 自身が音を上げると、そういう感じなのかなあという印象。

問題はなぜ resolv がコケるかなんだけど。ひょっとして DNS の問題か。

追記: うーん、やっぱ DNS の問題かな。

現在の jmuk.org はさくらインターネットを借りてやってるんですがその前は自宅サーバだったのでよくよく見てみれば www.jmuk.org の /etc/resolv.conf は自宅サーバを指していた。そのせいかと思って自前で named を上げてみた。そしたら、一回目の試行では失敗したのだが二回目から成功。名前を引くときの微妙に時間がかかるロスが蓄積していってどっかで破滅するということなのかな。さてはて。

Comments are closed.