開発者から最近よくタイムアウトになるとのお話があったのでちょこっと調べてみようかと。
まず、IISのタイムアウトってどこで設定されているのかを調査
ネットの情報によるとどうやら規定値は2分との事。
実際には、IISマネージャから「規定のWebサイト」のプロパティを見ると確認でき、120秒になっている。
ということは、Webアプリからのアクションが最低2分に1回ないとエラーになるって事かな。
さらに、http keep-aliveを有効にするというチェックボックスもチェックされているので、その通りなんだろうなと。
あと、事実関係を調査するために必要なログなんかは残っているのかも併せて調べてみる。
タイムアウトのログを調べてみると
C:\WINDOWS\system32\LogFiles\
以下にファイルがあるらしく、HTTPERRフォルダ以下にファイルがあったのでそれを見てみると
Timer_ConnectionIdle
という記述を発見。
これがどうやらタイムアウトの際に出力されるログらしい。
これを見てみると、時刻は0時とか1時とかそういう時間にしか出ていない。
と思っていたら、どうやらこのファイルには9時間の時差がある模様。
標準時でログをはいていらっしゃるみたいですな。
クライアントから本当にハートビートを送信しているのかを確認するためにMicrosoft Network Monitorをインストールしてみる。
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=983b941d-06cb-4658-b7f6-3088333d062f
さらに日本語化
http://applications.web.fc2.com/j10n/networkmonitor.html
とりあえずスタートページから対象となるネットワークアダプタを選択して新しい記録を行う。
今回は、とりあえずマシン内のVartualPC上のサーバとのやり取りをチェックするだけなので、ループバックアダプタを選択してキャプチャを開始する。
Webアプリを動かしてみるとさくっとキャプチャされた。
少なくとも2分に1回はHertBeatを送信しているはずなので、しばらく放っておいてみる。
と、サクッと何かを送信した模様。
そして少し放っておくとまたもや通信している。
正確な時刻は記録されないが、OFFSETという項目が前回からの経過時間を秒で表示してくれているようだ。
いろいろといじっていると、左にあるツリーでフィルタがかけられるようだ。
SQLのようなスクリプトでもフィルタをかけられるよう。
まぁ、やってみるかなと。
さらに調べてみる。
どうやら、Webアプリのタイムアウトはもう一つあるようだ。
アプリケーションプールのタイムアウトという値。
これはデフォルトでは20分となっている模様。
キープアライブのパケットは正確に120秒ごとに出力されているようなので、これでセッションを維持しているのかもしれない。
まぁとりあえずは20分間放置してからやってみようかなと。
結局、というか当然の結果、20分でアプリケーションタイムアウトになった。
KeepAliveが送信されないので当然なのだ。
さらに、当該パッケージでの設定では OEPEnableSessionTimeOut というパラメータにNが指定されている場合には定期的にパケットをやり取りする仕様のようだが、それが動作していない。
デバッグする必要がありそうなので、来週にでもメーカーに問い合わせてみるかと。。。
コメント