念力デバッグ:「念力デバッグ」という仕事があって、ごく稀にお仕事を頂く。念力デバッグというのは、安楽椅子探偵に似たようなデバッグで、デバッガやデバッグ用のコードを使わずに、直観と論理に基づく推理だけでバグを探すデバッグだ。通常のデバッグでは、デバッガを用いたり、デバッグ用のコードを走らせたりできるので、念力デバッグの出番はあまりないのだが、既に仕様書やソースコードが存在しなかったり、実機に触れることができなかったり、その全てがなくて、バグレポートだけでバグ解析して運用回避手段を見つける必要があったりという状況があって、そういう場合に、念力デバッグの登場となる様だ。念力デバッグの結果は、材料が少ないときは特に占いめいていて、「午前2時に、おにぎりを大量に買ってみて下さい。日配品の集計モジュールを書いた人が、コードを書いた当時に経験が浅かったとしたら、集計タイミングに売上が発生する可能性を考慮しておらず、一貫性が保てなくなった可能性があります。推理が正しければ、件の現象が再現すると思われます。」といったレポートを書いて、推理が当たれば一件落着となる訳だ。今回のケースを念力デバッグしてみると、DB接続をCookieに基づくセッションによって管理する作りになっている。Cookieを食わないクライアントからリクエストを受けると、リクエスト毎にDB接続が生成される。DB接続を含めたサーバリソースは、タイムアウトによってセッションが破棄されるまで解放されず、確保されたままになる。DB接続に必要なサーバリソース(DB接続の上限あるいはコネクションプールと思われる)が不足した状態でリクエストを受け付けると、リソース確保時にエラーが発生するが、このエラー処理が不完全なため、途中まで構築されたオブジェクト等の何らかの別のリソースの解放処理が行われない。このため、エラーが発生している状況でさらにアクセスを行おうとすると、エラー処理の漏れによって、タイムアウトで解放されない形でサーバリソースが枯渇して、ASPの停止に至る。いうことだと思われる。確認は容易だが、万が一、真似する人が出て「教唆だ」等と言われるとたまらないので、あえて書かない。その方法は、一般的なクローラの挙動そのものだ。この推理が当たっていれば、DB接続の上限に達するまでは、ほとんどサーバの応答時間は変わらないであろうし、エラーが発生したとしても、順次タイムアウトで解放されていくリソースがあるために、散発的にしかエラーが観測されないということが起こり得る。最後の一アクセスがサーバダウンの引き金を引くロシアンルーレットだ。ネットは魔法使いの世界ではないはずだ。こんなバグを抱えているのだとしたら、これはもはや、インターネットにはつないではいけないレベルの製品だと言わざるを得ないだろう。ASP版のMELILを導入していて、実証のためにサーバが停止する可能性があるアクセスを許容してくださる図書館の関係者の方がいらっしゃれば、日時等の実験条件は当然、指定に従うので、ぜひ連絡を頂けないだろうか。7月23日追記[http://www.nantoka.com/~kei/diary/?20100722S1]:その後の情報で、「念力デバッグ」の推察をアップデートした。ページを開くたびにDBに接続しに行っていては遅いから、ADOオブジェクトをSessionオブジェクトとして保持しているとか。接続毎にADOオブジェクトを新規に作って、破棄の方はSession_OnEndに任せていたりすると、タイムアウト(デフォルトでは20分)まで、DBセッションが解放されないことになる。robots.txtが激しいのは、これを問題だと認識していたからだろうか。館内検索端末など、台数と操作が限定された端末のみあれば、「例えば」と書いた実装でも、問題が表面化することなく動作するケースが多いだろう。TCPのシーケンス番号を用いているのだと思われる。この記事を読んで、「試しにCookie無しでアクセスしてみよう」というのは慎んで頂きたい。Tweetファイル名の変更を追跡できるのは便利だけれども、CVSに慣れてしまっているとタグやブランチの扱いにとまどうことが多い。慣れの問題ではあると思うけれども。長崎空港:大阪乗換えのために、朝8時の便に搭乗。大阪空港:大阪に着いたけど、乗換え便まで3時間以上ありますね。展望デッキに出てみると、カメラ持った人たちが大勢いて驚く。写真の題材にたまたま飛行場を選んだという感じの人が大部分を占めている様でした。写真ブームはデマではなかったらしいです。充電不足:出発ぎりぎりまで仕事に追われてしまって。準備が不足していました。ノートパソコン×2デジタルビデオ×3単三型ニッケル水素×12の充電をかけておく予定が狂ってしまって、特にノートパソコンが厳しい。これを利用しようと思ったのですが、ACアダプターは預け荷物に入れてしまっていました。北海道に到着:予約済みのエアポート153号に乗り換え。指定席は座席を広めに取ったuシートなので、荷物が多いときはラク。「確実に座れる」以上のメリットがある指定席になっています。カシオペア:エアポート153号、札幌着1554。発着案内で、カシオペアが入ることに気づいたので見学。慣れているので問題無いのかも知れないですね。この辺り、経験豊富な方のアドバイスが欲しいところです。自分が乗る立場だと撮影する時間がなさそうですね。そもそもホームのどちら側からどういう編成で入線してくるかも予習していないのが辛い所。「自由席はどれだろう」という会話が。二人で「ロビーカーにいれば」とか「立っていればいいんでしょ」とか話し合ってどうも乗ってしまったらしいです。車掌さんどういう扱いするんでしょうか。悪気がないだけに扱いに困る気が。小樽:小樽行って来ました。すすきの:すすきのも行ってきました。事前の調査不足で結局、全国チェーンの居酒屋(魚民)へ。中くらいに幸せな夕食。どこかの駅で、「運転に支障をきたすので列車に向かってフラッシュを焚かないでください」という案内を見た気が。フリー切符で立席利用はできるんでしたっけ。ないかなぁということが判明。