locked
ASPXからASPを実行するとフリーズ状態になります RRS feed

  • 質問

  • WINDOWS2003サーバに.NET2003をインストールして、ASPXにてWebプログラムを作成しております。
    ASPXからASPを実行する処理を実行しているのですが、希にメータが全く動かないフリーズ状態となります。
    この状態となった場合は、OSの再起動を実行して対応を行っております。何故、この現象が発生するのか
    分からず、苦しんであります。(WINDOWS2000サーバで同じ環境を作成して実行しておりますが、
    問題の現象は発生しません)WINDOWS2000のサポートが終了し、2003に切換を行う必要があるのですが
    この現象の為、切換が出来ないでおります。

    原因や対策等分かりましたら、教えていただきたいのですが。

    宜しく御願いします

    • 移動 奥主 洋Microsoft employee 2010年9月9日 17:16 バージョンの適合 (移動元:Internet Information Services 7.x – 全般)
    • 移動 Wang Huang 2012年10月1日 14:02 (移動元:Internet Information Services 5.x, 6.0 - 全般)
    2010年8月31日 4:48

回答

  • はい、一人しか確認用のWebサーバは使用していません。
    この状態で今も現象が発生しました。

    対応は、サーバのリブートかインターネットサービスの再実行しかない状態です。


    なるほど。1人だけが1本のリクエストをするだけでも現象は再現するのですね。K.Oumi さんの睨み通り、結構単純な原因であるように思います。
    ログの出方からすると、現象は Application 変数がらみのデッドロックですので、そのあたりを重点的に見直すのもありかと。
    (Lock だけして Unlock していないとか、呼び出している COM の内部で Application 変数の Lock をしているとか)

    ダンプを解析するのが王道のようにも思えますけれども。

    ファイル出力のログを確認しているのですが、問題発生時ASPは何も動作していないようです。


    global.asa はどうですか?Session_OnStart とか Session_OnEnd とかないですか?
    • 回答の候補に設定 星 睦美 2010年9月29日 4:03
    • 回答としてマーク 星 睦美 2010年10月1日 2:43
    2010年9月17日 7:01
  • こんにちは。

    ご質問の意味を少々わかりかねているのですが、「ASPX から ASP を実行する処理」、「メータが全く動かないフリーズ状態」 というのはどのような状況(状態?)でしょうか。

    この辺をもう少し具体的にご説明いただけると、良いと思います。

    小山
    http://keicode.com/

    • 回答の候補に設定 星 睦美 2010年10月1日 2:05
    • 回答としてマーク 星 睦美 2010年10月1日 2:43
    2010年8月31日 7:52
  • iisstateについては下記サイトから

    IIS 6.0 Resource Kit Tools について
    http://support.microsoft.com/kb/840671/ja

     

    あと、エラーハンドラが無いようなのですが、
    on error なんとか、でエラーの情報拾えませんか?

    また、対象のファイルを更新する処理でOPENしたままになる現象が起きていたりしませんか?普通に考えるとそのような、「あっ!」っていうミスが多いとおもうのですが・・・

     


    K.Oumi
    • 回答の候補に設定 星 睦美 2010年9月29日 4:04
    • 回答としてマーク 星 睦美 2010年10月1日 2:43
    2010年9月17日 4:40

すべての返信

  • こんにちは。

    ご質問の意味を少々わかりかねているのですが、「ASPX から ASP を実行する処理」、「メータが全く動かないフリーズ状態」 というのはどのような状況(状態?)でしょうか。

    この辺をもう少し具体的にご説明いただけると、良いと思います。

    小山
    http://keicode.com/

    • 回答の候補に設定 星 睦美 2010年10月1日 2:05
    • 回答としてマーク 星 睦美 2010年10月1日 2:43
    2010年8月31日 7:52
  • おはよう御座います。

    質問が分かり難く申し訳ありません。

    login.aspxのソース(HTML)の最後に下記の文を入れて、aspのプログラムを動かしています。
    <SCRIPT langeage=javascript>
     windows.open('setses.asp?SES1=A&SES2=B');
    </SCRIPT>
    setasp.aspでは、セッションの設定やDB検索を行っています。

    ASPXで設定したセッションがASPで利用できないためこの様なプログラムを作っている状態です。
    ここで設定したセッションは、後で呼び出すASPのプログラムで利用を行っています。

    login.aspxからsetses.aspを立ち上げた際に通常直ぐに完了する処理が終わらないことが希に
    発生します。発生頻度は、1日1回程度でしょうか(一日で500回位のログインは行っています)。
    又、現状の本番はwindows2000サーバで実行していますが、現象は発生していません。
    新たに作成したwindows2003サーバでのみ現象が発生します。(導入プログラムは同じです)

    何故発生するのか?どうすれば直るのか?が分からず、windows2003に切換が出来ない状況です。
    宜しく御願いします。

    2010年9月1日 0:17
  • 自己レスです。

    ASPXからASPを呼んだ際にフリーズする現象が発生すると書きましたが
    一度この現象が発生しますと、IISのWEBサイトから.ASPを実行すると
    全てフリーズする現象となってしまいます。

    HTMやASPXを実行しても問題はありません。

    ASPXからASPを呼んだ際の現象ではなく、ASPを呼んだ際にフリーズする
    現象が発生するという内容だと思います。
    ASPの何処まで実行しているのか確認を行いましたが、1行も実行して無いと思われます

    IISの設定に原因があると言うことでしょうか?

    宜しく御願いします

    2010年9月1日 7:22
  • こんにちは。

    500回アクセスして、1回程度(0~2回)だけ発生するとすれば、現在提示されている「状況」だけでのアドバイスは難しい気がします。

    ・イベントログに何か出力されていないか。
    ・アプリケーション プールのリサイクル状況はどうか
    ・通信をモニタしてみる(リクエストは届いているのかどうか)
    ・ルーターが何か悪さしていないか
    ・ASPで解放すべきオブジェクトを解放せずにのこしたまま?
    ・アクセスログ分析
    ・ASPが全て実行できない状況で、アプリケーションプールをリサイクルするとどうなるか?とか・・・
    ・ASPXとASPは別セッションなのでセッションオブジェクトが共有できないのは当然、なところで何か特別な細工していることが問題?
    ・他にもいろいろあるかも

    最近IIS触ってないのでこれだ!ってくるものはないのですが・・・調査するポイントは沢山ありそうです。

    とはいっても、イベントログにも何も出力されずに、だんまりということなんでしょうか?
    もしそうだとすると、地道な調査が必要な気がします。


    K.Oumi
    2010年9月1日 8:56
  • おはよう御座います。

    サーバのイベントログには何も出力されません。

    今、まさしく現象が発生しています。(テスト環境の為、問題はありませんが)
    問題の環境でASPを実行すると、IEが真っ白で下のメータが微妙に動いているだけ、
    終わることはありません。

    又、ASP自体を何もしないソースに修正し、
     ・一番上にJavaScriptでALERT文を入れる
     ・Response.Writeで画面表示を行う
    としても、何も変化がない状況です。

    対策としては、サーバのリブートで現象はリセットされますが
    直ぐに発生する状況で、本番環境にはとても利用できる状況ではありません。

     

    2010年9月1日 22:17
  • こんにちは。

    状況としては、やはり手がかりが少ないので、Debug Diagnostic Tools でダンプを取って、実際にどの辺りで処理が止まってしまうのか確認するのが一番確実とおもいます。

    こちらの記事にハングアップ時の情報採取手順がありますので、このツールが初めてでしたら参考になるとおもいます。

    Web/DB プログラミング徹底解説 - ハングアップ
    http://keicode.com/debug/dbg415.php

    # うまくいけば、ダンプ解析をしなくても、レポートにどの辺で停止しているか表示されます。

    ちなみに、一般的には、この状況は ASP からの COM 系の呼び出しでおきるのが普通です。どのようなシステムか処理内容は存じませんので、一般論になりますが、Session オブジェクトに一度作った COM オブジェクトへの参照を設定して使いまわしているとか (この場合、毎回 Server.CreateObject, Nothing するよう書き直す) が昔よく見た事例です。 

    ともあれ、ダンプを取るとどのモジュールのどの辺か、というのもみえてきますので、おすすめです。(うまくいけば、停止している ASP の行も見えてきます)

    以上、参考になりましたら幸いです。

    小山
    http://keicode.com/

    2010年9月2日 0:25
  • こんにちは。

    Debug Diagnostic Toolをインストールして実行してみました。

    ERRORと表示された内容は下記の内容でしたが、良く意味が分かりません。
    このエラーを元にどの様に確認すればよいでしょうか?
    見当違いの質問をしていましたら、ご容赦ください

    Detected a serious critical section related problem in w3wp.exe__DefaultAppPool__PID__2176__Date__09_02_2010__Time_11_45_04AM__268__IIS_COM+ Hang Dump.dmp

    Lock at 0x02042028 is Orphaned
    Impact analysis
    100.00% of executing ASP Requests blocked
    35.00% of threads blocked
    (Threads 29 30 31 32 33 34 35 36 37 38 39 41 42 44 46 47 48 51 52 54 56)
    The following functions are involved in the root cause
    asp!CAppln::Lock+44
    The following modules are involved in the root cause
    \\?\C:\WINDOWS\system32\inetsrv\asp.dll from Microsoft Corporation

     

    2010年9月2日 4:22
  • こんにちは

    以降は、ダンプファイルの中を見て行く必要があるのではないでしょうか。

    asp!CAppln::Lock+44
    が出ているので、まさに何かロックしようとしてハングっている気がします。
    「だれが」「どこで」「何をしている」を探る必要があります。

    IISSTATE(リソースキット) のログも状況を把握するのには有効かもしれません。

    IIS5.0 と IIS6.0 の非互換情報をチェックしてみるのも良いかもしれません。
    (プロセス分離モードだと動くかもしれません)

    定期的にリサイクルすると発生しないとか・・・(対処療法的ですが・・)


    K.Oumi
    2010年9月2日 7:10
  • こんにちは。

    asp!CAppln::Lock+44 は asp が使ってるロック (Critical Section) だとおもいますが、この高頻度で不具合に遭遇するというのもあまり無い話とおもわれます。。。さて、どうするか、ですよね。

    確認なのですがこのログは、平常実行状態 (ここでツールをセット) → ハングアップ発生 (ツールによってダンプを自動採取) という流れで採取されましたか?それともハングアップの状態を長時間保持(調査目的で)しているところでダンプを採取されましたでしょうか?IIS6 ではハングアップが発生した後に、ASP 側である程度対処しようとしてしまうので、もしかしたら元の現象と違うこともありえるかとおもいます。(可能性は低いかもですが) もし後者でしたら、平常実行状態から、現象が再現するまでツールを仕掛けてもう一度情報を採取してみてはいかがでしょうか。

    それと、念のためイベントログに ASP から何かエラーが出ていないか、ご確認されると良いとおもいます。

    ちなみに、今回の状態は Application オブジェクトのロックで、ロックをかけたまま何か処理をして、そのまま解放せずにスレッドが終了した状態とおもわれます。とすると、Application オブジェクトの使い方で何かありそうですが・・・ ただのキー・バリューをセットするだけでは、こんなことは起きそうに無いとおもいます。

    試して無くただの予想で申し訳ないですが、Application オブジェクトを使って行っている(キー・バリューのセット以外の)何かの処理が失敗して、内部でアボートして、ワーカースレッド内のスレッドがどれかいなくなったようなこともあるかもしれませんね。

    K.Oumi さんのご提案に加え、試すこととしては逆にプロセス分離にしないで全てインプロセスにして、「ASP のデバッグを有効にする」 というのにチェックしてみたらもしかしたら回避できるか、あるいは、現象が変わって調査しやすくなるのでは、とおもいました。

    小山
    http://keicode.com/

    2010年9月2日 16:20
  • おはよう御座います。

    ツールを起動した後にハングアップを発生させて、ログを取得しました。
    但し、サーバがハングアップを必ず発生する状態になってから行っています。

    昨日インターネット上の情報を調べて、『IIS5.0 プロセス分離モードで実行する』にチェックを入れて
    サーバを運用してみましたが、同じくエラーが発生しました。
    エラー発生の際にツールを起動しましたが、昨日と同じエラーが発生していました。
    windows2003(IIS6)のみ発生していますので、もしかしたら直るのではと期待していましたが駄目でした。

    イベントログには何もエラーは乗ってきていません。

    小山さんの逆にプロセス分離にしないで全てインプロセスにして、「ASP のデバッグを有効にする」 とありますが
    IISの設定上で見つけることが出来ません。何処で設定をするのでしょうか?

    2010年9月2日 23:56
  • こんにちは。

    まず、採取タイミングですが、必ずハングアップが発生する状態になる前に仕掛ける方が良いと思います。(問題のロックが Orhpaned になるきっかけとなるログが残る可能性があるのでは、と期待してます)

    それから、「インプロセス+ASP のデバッグ」 という設定については、舌足らずで申し訳ありませんでした。

    これは 「IIS 5 互換モード+Application protection = Low (IIS Process) + Enable ASP server-side script debugging をチェック」 のつもりでした。ASP のデバッグについては、ASP のアプリケーションの 「設定 (Configuration)」 ボタンをクリックして、表示されたダイアログ内の Debugging タブを選択します。そこの上部に設定があります。

    ASP のデバッグを有効にすると、処理が並列処理とならずシリアライズされます。これによって回避あるいは解決、とはいかないかもしれませんが、だいぶ挙動が変わり、もう少しわかりやすいログが取れるかもしれないと期待してます。 

    小山
    http://keicode.com/

    • 回答の候補に設定 星 睦美 2010年9月8日 4:32
    • 回答の候補の設定解除 星 睦美 2010年9月13日 5:09
    2010年9月3日 6:17
  • こんにちは。

    現在、ハングアップしていない状態でログの採取を実施しています。次回発生した際に確認を行ってみます。

    ASPのデバッグに関してですが、IISマネジャーを探しても「設定 (Configuration)」 ボタンを
    見つけることが出来ません。IISマネジャーでは無く別な事を言われているのでしょうか?
    申し訳ありませんが、宜しく御願いします

    2010年9月3日 7:57
  • 私の環境は英語環境しかないので、日本語 UI ではもしかしたら "設定" ではなかったかもしれません・・・(申し訳ありません)。

    サイトのプロパティを開き、"Home Directory" タブを選択、Application settings のグループの中の右側、下から二番目のボタンが Configuration のつもりなのですが・・・ (日本語 UI で 「設定」 ではなかったでしたっけ・・・? IIS6 ですよね?)

    以上、よろしくお願いします。

    小山
    http://keicode.com/

    2010年9月3日 14:35
  • おはよう御座います。

    丁寧な説明有り難う御座います。
    分かりました。設定を行ってみます。

    有り難う御座いました。

    2010年9月5日 23:23
  • おはよう御座います。

    ASPのデバッグの設定を行ってみましたが、現象(挙動)に変化はありませんでした。
    ログの収集を行ってみましたが、変化はありませんでした。

    デバッグの設定をした当初はエラーが発生せず、もしかして改善したと思ったのですが
    昨日エラーが発生してしまいました。

    HTMLやASPXは正常に動作し、ASPのみハングアップするような現象が発生します。
    どうすれば解決するのか分からず、何をすればよいかも分からない状況です。

    2010年9月9日 1:48
  • こんにちは。

    困っている気持ち、伝わってきました。

    が、ここまで解決方法についてということよりも、調査方法についての話がされてきています。そのうえで、何をしていいかわからないという事であれば、ちょっと問題ですね。
    ダンプを調査する。iisstateのログを見る。など


    これらがハードル高いようであれば、(冷静になって)次の事を一通りやってみてはいかがでしょうか。

     

    1)Application Objectの使いかたに問題がないかを関係ソースについて全てチェック。
    きちんと破棄されるべき物が破棄されているかなど。
    例外条件など特定のケースでの実行漏れが発生しないかなど。


    2)COMオブジェクトの使いまわしについてチェック
    例外条件など特定のケースでの破棄漏れが発生しないかなどもチェック。


    3)以下のページを参考に問題が無いかをチェック。
    古いCOMコンポーネントやSTAなコンポーネントを使っているために、問題が起きているかもしれません。(MDACなど関係あるかも?)
    ASP テクノロジでのコンポーネントのトラブルシューティング http://msdn.microsoft.com/ja-jp/library/dd313984.aspx


    4)使用しているCOMコンポーネントを列挙する。
     あ!それならこうかも!という(私ではない)誰かがいるかもしれません。


    5)最後の手段
    MS(かどこか)のサポート窓口等を頼る。


    6)究極の手段
    どこかにソースを全部晒す。さすがに無理がありますよね・・・
    問題となっているASP ソースが特定できれば、全体(か部分)を見せられる範囲で提示するというのは、ありだと思います。

     


    K.Oumi
    2010年9月10日 2:01
  • こんにちは。

    今までプログラム(VBSCRIPTやVB.NET)を行ってきて、環境面に関しては殆ど行ってきておりませんでしたので
    不可解な現象が発生して非常に苦しんでいます。

    現在までに分かっている内容を記入します。

     1.windows2000サーバでは問題は発生していません。
       windows2003サーバでのみ現象が発生します。
       自分としては、windows2000と2003でのIISの設定は同じにしているつもりです。

     2.windows2003で発生している現象は常に発生している訳ではありません。
       但し、一度発生すると、その後IISの再起動等行わない限り解決しません。
       発生するタイミングは不定期で、短いときは数分で発生し、長いときは数日掛かります。

     3.発生している現象は、あるWebサービスでのみASPファイルが動かなくなる。
       ASPファイルの最初にresponse.writeやJavaScriptのalertを入れましたが、全く反応が無く
       全く動いていないと思います。
       その為、何処のソース問題が起きているのか分かっていません。
       問題発生時にHTMLやASPXに関しては問題なく動作する事は確認出来ています。

       私が言葉の定義がなっていない可能性がありますので、追記します。
        Webサービス:IISの規定のWebサイトで私が作成した仮想ディレクトリの一つです。

    自分としては、IISの設定が一番怪しいのではないかと思っています。
    (例えば、2000では問題なく動作するが、2003になって厳密になり問題が発生している等)
    一番の問題は、前任者が設定したIISの設定の意味を分からずに同じ設定をしている自分にあることは明かと思います。
    皆さんのアドバイスをいただいたり、インターネット上で確認を行い、対応や現象確認を行っているのですが、
    未だ原因判明しておりません。
    解決のヒントとなるような事がありましたら、是非アドバイスを御願い致します。

    2010年9月13日 4:31
  • hi,

    現象だけを何度も投稿しただけでは、何も解決しませんよ~

    >不可解な現象が発生して非常に苦しんでいます。
    調査が全く進展していないように見えるのが不可解です。

    >皆さんのアドバイスをいただいたり、インターネット上で確認を行い、対応や現象確認を行っているのですが、
    ApplicationObjectの問題ではない、という結論だと理解して良いですか?
    そのたCOMオブジェクトの問題でも無いということで良いですか?
    つまり、ロックはコードの問題で発生していないという、確認は完了したと考えて良いですか?

    フリーズしたときに、ワーカープロセスのリサイクルで解決しませんか?OSのリブートでなければ解決しないとするとIISのバグの可能性(おそらく未知の)もでてきます。

    もっとも、環境の問題だと考えているなら、まず設定値が正しいということを確認したほうがよいですね。

    じつは、「最大CPU使用率を越えた時の動作」でシャットダウンとか・・・
    ラピッドフェール保護の指定が妥当でないとか・・・
    そもそも、メモリのサイズが違うからとか・・・
    同じ設定=数値が同じ99なら99、同じ設定=数値の算出根拠が同じ:30%(母数によって変動)
     


    K.Oumi
    2010年9月14日 6:23
  • 月並みですみませんが、OS のサービス パックは最新のものを当てていますでしょうか?

     1.windows2000サーバでは問題は発生していません。
       windows2003サーバでのみ現象が発生します。
       自分としては、windows2000と2003でのIISの設定は同じにしているつもりです。


    OS 以外にもハードウェア構成など変わっていませんでしょうか?例えば CPU がマルチになったとか。
    CPU が複数になることによりスレッドが並行に動作し、隠れていたスレッド絡みのバグが顕在化した例に(IIS ではありませんが)遭遇したことがあります。

     2.windows2003で発生している現象は常に発生している訳ではありません。
       但し、一度発生すると、その後IISの再起動等行わない限り解決しません。
       発生するタイミングは不定期で、短いときは数分で発生し、長いときは数日掛かります。


    クリティカル セクションのデッドロックですので、発生するタイミングは不定期になります。
    たくさんのリクエストをいっぺんに処理しようとすると頻度は上がると思います。

     3.発生している現象は、あるWebサービスでのみASPファイルが動かなくなる。
       ASPファイルの最初にresponse.writeやJavaScriptのalertを入れましたが、全く反応が無く
       全く動いていないと思います。
       その為、何処のソース問題が起きているのか分かっていません。
       問題発生時にHTMLやASPXに関しては問題なく動作する事は確認出来ています。

       私が言葉の定義がなっていない可能性がありますので、追記します。
        Webサービス:IISの規定のWebサイトで私が作成した仮想ディレクトリの一つです。


    Response.Write はクライアントに応答を返さないと見えませんし、JavaScript の alert もクライアントに応答が返ってからブラウザーの上で実行しないと見えません。
    応答を返す前にハングしている状態だとすると、どちらも有効なデバッグ方法ではありません。
    面倒かもしれませんが、外部ファイルに文字列を出力するようなトレース ログを仕込むのが確実なのではないでしょうか。

    ログをいっぱい仕込むと、スレッドの実行タイミングが変わってしまうので、デッドロックが隠れてしまったりするかもしれません。
    ダンプを解析するのが本当は近道だったりするのかもしれません。
    2010年9月14日 6:55
  • おはよう御座います。

    正直なところ、調査が全く進展していないのが現状です。

    response.writeやALERTで反応が無いため、現象発生時は1行も動作していないと思い
    環境面を疑った次第です。

    ASPに外部ファイルにログを書き出す仕組みを取り入れて
    何処で現象が発生しているのか場所の特定からやり直してみます。

    2010年9月14日 23:24
  • こんにちは


    以下ほとんど、老婆心なのですが。

     

    >発生するタイミングは不定期で、短いときは数分で発生し、長いときは数日掛かります。

    という事ですが、発生する前には同じ操作(ページ操作など)を行っているとかいう事はありませんか?
    もしくは、発生する操作の前に行っている操作がいつも共通しているとか・・・
    もしくは操作の意味として同じことをしているとか(データは違うけど、内部の処理的に大量のループが発生するとか)
    (リークによるハングアップの可能性を疑っているという事です)
    (本番では、適度にリサイクルが実行されるので、問題が顕著にならないという可能性もあります。アプリケーションプールも複数使っているとか・・・)


    ダンプやトレースなど「実際を追う調査」ではなくて、ログを仕込んだりする「現象を追う調査」を行うのであれば、操作のパターンや発生するパターンなどについて注意を払う必要があります。そうしたうえで、共通するパターンやコードなどを推測し、特定しなければなりません。たとえば、状況によっては問題のサービス以外がトリガとなっている事もありえるわけです。そういった「現象を追う調査」を行う場合でも、最低限パフォマンスカウンタでハンドルの数やメモリの使用量などについては、取得しておき、問題が発生したときにどのような状態・推移かを見る必要があります。iisstateを併用すると(うまくいけば)問題が発生したときのスタックトレースが見られるかもしれません。デッドロックなら1発で解るでしょう。(まこれはDebug Diagnostic Tools でも同じはず)

     


    どのような調査方法を実行するにしても

    1)新旧の環境の違い
     ハード構成、スペック、バージョン
    2)利用しているCOMコンポーネントのバージョン
     W2K3で利用可能なコンポーネントを使っているかどうか。ADO,JETなども注意。
    3)設定値
     特にワーカプロセスに関する設定値

    については問題が無い(はずだ)という確認(または納得)をしておく必要があります。

     


    最後に、今更ですが・・・無いとは思いますが・・・さすがに疑いすぎかな(^^;申し訳ないです。
    ASPからEXCELを使いにいったりしてないですよね(^^;


    K.Oumi
    2010年9月15日 6:48
  • おはよう御座います。

    発生している際に共通している動作としては、
     ・ASPXからASPのプログラムを起動しています。
      ASPXのJavaScriptからwindow.open()で実行しています。
      この動作を行った際にASPがフリーズする現象が発生します。
      その為、このスレッドを投稿した際の題名が『ASPXからASPを実行すると...』となっています。
     ・その後の確認で、現象発生時はASPは全く動作しない事が分かっています。

    新旧の違いとしては
     ・ハード構成は同じです。同じブレードでOSのみ異なります。
     ・ソフト構成は下記のようになっています。(かなり古い構成ですが、OSとIIS以外は同じ構成です)
                  旧                                      新
        OS      windows2000サーバ             windows2003サーバ
        .NET     2003                                  2003
        ORACLE  817                                    817
     ・ASPでのORACLE接続はADOを使用しています。
      windows2003ではADOは利用出来ないのでしょうか

    ASPからEXCELの操作等は行っていません。

    2010年9月16日 1:21
  • ADO を使えないということはないでしょう。デッドロックが発生しない場合もあるようですし。
    何度も申し訳ありませんが、OS のサービス パックは最新のものを適応されていますでしょうか?

    Windows Server 2003 と ADO をキーにして検索したところ、次の KB がヒットしました。

     ADO ベース アプリケーションとが応答停止 Windows Server 2003 または Windows XP では、Recordset オブジェクトを開くには、adAsyncExecute オプションを使用することがあります。
     http://support.microsoft.com/kb/955843/ja

    現象は SQL Server で説明されていますが、ADO 絡みのようですので Oracle でも該当するかもしれません。
    ただし、デッドロックの箇所が ADO 絡みであるという確証はありませんので、ダンプを解析するなり Oracle のステータスを確認した上で、適用を検討することになると思います。
    2010年9月16日 6:40
  • こんにちは。

    どうもうまく話が通じていいないようで、自分の文章力にがっくりきました。


    さて、

    .NET 2003 => .NET Framework 1.1 or 1.0 ?どちらでしょう

    Oracle 8.1.7は既にサポートも切れている気がしますが。
    Oracleって確か、サーバサイドでも、Oracle Client のバージョンも関係してきますよね確か。(ちがったかも)
    OLEだと思いますが、開発環境と本番と同じなのですよね?
    ODP.NETは確かパッチがあったと思いますが、OLEだとどうなんでしょう?
    もしODBCだとすれば、ODBC8.1.7系はWindwos Server 2003 に対応していましたっけ?OLEも対応してたかな?
    そのへん確かめておくと良いと思います。(OiSCかOTNに情報があるんでしたっけね)
    Oracle久しく触ってないので、記憶が・・・

    あとは、
    問題のハングアップが発生したときに、DBMS側でコネクションがどのようになっているかはチェックされましたか?
    コネクションの最大値に達しているとか?
    単純に、テストデータなどの問題でデッドロックが起きたりしていませんね?
    あとリスナーが開発環境だけなんらかの理由で落ちるとかも無いことを確認されていますか?


    まとめると

    ・イベントビューアに、アプリ、IIS、Oracle、システム。どれからも何も出ていない。
    ・DBMSから見た、コネクションの状態も問題無く、デッドロックも無い。
    ・パフォーマンスカウンタをチェックして、ハンドルリークも無さそうで、メモリの使用量も問題無い。
    ・何かのはずみで(例外条件などで)COMオブジェクト等がメモリに残るような、コードの実装・記述ミスが無い。
    ・iis stateのログにもこれといって原因を特定でいるようなものが出ていない
    ・ハードウェアも完全にスペックが同じで変わらない。
    ・テストデータも問題ない。
    ・.NET Frameworkのバージョンとパッチの状態も全く同じでかつ最新状態。当然OSも。
    ・Oracle系ドライバのバージョンなど関しても、本番/開発環境同一で、サポート情報にも問題が無い。
    ・Oracleドライバの対応OSや対応.NET Frameworkにも問題が無い。

    これらがすべてクリアできるなら、最初に取得したダンプの内容をチェックすることをお勧めします。


    K.Oumi
    2010年9月16日 6:50
  • 微妙に内容かぶってますね(^^;

    morinagt さんfigting!!


    K.Oumi
    2010年9月16日 6:53
  • こんばんは。

    >イベントビューアに、アプリ、IIS、Oracle、システム。どれからも何も出ていない。
      イベントビュワには何も出力はされていません。
    >DBMSから見た、コネクションの状態も問題無く、デッドロックも無い。
      問題発生前,発生後共にDBから見て問題は見あたりません。
      本番環境(windows2000)と確認環境(windows2003)は双方同じDBに接続しています
    >パフォーマンスカウンタをチェックして、ハンドルリークも無さそうで、メモリの使用量も問題無い。
      問題発生前と後で、タスクマネジャでメモリの使用量に大きな変化はありません
    >何かのはずみで(例外条件などで)COMオブジェクト等がメモリに残るような、コードの実装・記述ミスが無い。
      本番環境では正常に動作していますので、基本的にコードミス等は無いと思っています。
      windows2000と2003とで変えなければならない内容に関しては、?の状態です。
    >iis stateのログにもこれといって原因を特定でいるようなものが出ていない
      IISのログも出力していますが、特に異常な内容は出力されていません。
    >ハードウェアも完全にスペックが同じで変わらない。
      本番,確認環境とも、ハードスペックは同じです。
    >テストデータも問題ない。
      本番データで確認を行っておりますので、問題は無いと思っています。
    >.NET Frameworkのバージョンとパッチの状態も全く同じでかつ最新状態。当然OSも。
      .NET Frameworkのバージョンに関しては、余り意識したことがありません。
       .NET Framework 1.1 or 1.0 どちらを使用しているかは何処を確認すれば良いのでしょうか?
      OSに関しては長期連休にまとめてパッチの適用を行っています。
      totojoさんからご指摘のあった955843に関しては、適用されていないようですので適用を行ってみます。
    >Oracle系ドライバのバージョンなど関しても、本番/開発環境同一で、サポート情報にも問題が無い。
      Oracle環境に関しては、本番,確認環境とも同じです。

    又、問題発生時に何処でフリーズしているのかソースにファイル出力を入れて確認を行いました。
    下記のソースで2箇所に入れましたが、(1)は実行されていませんでした。
    結果として、ASPは1行も実行されていない様です。

    <%@ Language=VBScript %>
    <%
    '******************************************************
    '* 処理名称:.NET対応ASPセッション設定
    '*******************************************************
     Option Explicit
     
     dim fs
     
    'response.Write "<SCRIPT language=JavaScript>"
    'response.Write "alert('--');"
    'response.Write "</SCRIPT>"
     Set fs = CreateObject("Scripting.FileSystemObject")
     fs.CopyFile  "e:\webapl\alps-n\inp\A.txt", "e:\webapl\alps-n\out\START.txt", True  <=(1)
     Set fs = Nothing
     Session.Timeout = 120
     Server.ScriptTimeout = 600
     for each G_Cnt in Request.QueryString
      Response.Write G_Cnt + "->" + Request.QueryString(G_Cnt) +"<BR>"
      session(G_Cnt)=Request.QueryString(G_Cnt)
     next
     for Each G_Cnt In Request.Form
      Response.Write G_Cnt + " : " + Request.Form(G_Cnt) + "<BR>"
     next

     Set fs = CreateObject("Scripting.FileSystemObject")
     fs.CopyFile  "e:\webapl\inp\A.txt", "e:\webapl\out\B_DB_OPEN.txt", True         <=(2)
     Set fs = Nothing
    '-> DBオープン処理
     Set G_Dbc = Server.CreateObject("ADODB.Connection")
     G_Dbc.Open Session("DatabaseName"),session("DBUSER"),session("DBPASS")

    2010年9月16日 9:11
  • こんにちは。

    CreateObjectは、毎回うまく動作しているのですね?
    CopyFile  が動いていないのですね?

    とすれば、

    対象のファイルを誰かがOPENしたままという事はありませんか?
    このASPコードおよび、他のASPコードで同じファイルを扱っていませんか?もしくは、このASPが同時に複数実行されるケースはありませんか?

    例外ハンドラは、正しく機能していますか?
    ACLの設定を忘れいているとか、ありませんか?

    じつは、ファイルが巨大でコピーに時間がかかるってことはありませんか?

     

     

    ちなみに、iis state のログとは、iis のログではありません。
    >IISSTATE(リソースキット) のログも状況を把握するのには有効かもしれません。

    >問題発生前と後で、タスクマネジャでメモリの使用量に大きな変化はありません
    パフォーマンスカウンタでinetinfoの情報を見なければわからないと思います。

    >Oracle環境に関しては、本番,確認環境とも同じです。
    同じなのがまずいかもしれません・・・
    Oracle 8.1.7 は W2K3でサポートされてなかった記憶があります。(間違いだったらすみません。)ADO経由の場合、Oracle Client は関係ないということであれば問題は無いのかもしれません。

     


    K.Oumi
    2010年9月17日 2:49
  • こんにちは。

     Set fs = CreateObject("Scripting.FileSystemObject")
     fs.CopyFile  "e:\webapl\alps-n\inp\A.txt", "e:\webapl\alps-n\out\START.txt", True  <=(1)
     Set fs = Nothing

    に関しては、あくまで何処で問題が起きているか確認を行うために、テスト的にいれた部分です。
    ファイルは1行のテキストファイルで巨大なファイルではありません。
    又、確認環境は1人で利用していますので、コピー処理で共有違反等起きることはありません。

    iis state のログはどの様に取得すればよいでしょうか?

    2010年9月17日 4:28
  • iisstateについては下記サイトから

    IIS 6.0 Resource Kit Tools について
    http://support.microsoft.com/kb/840671/ja

     

    あと、エラーハンドラが無いようなのですが、
    on error なんとか、でエラーの情報拾えませんか?

    また、対象のファイルを更新する処理でOPENしたままになる現象が起きていたりしませんか?普通に考えるとそのような、「あっ!」っていうミスが多いとおもうのですが・・・

     


    K.Oumi
    • 回答の候補に設定 星 睦美 2010年9月29日 4:04
    • 回答としてマーク 星 睦美 2010年10月1日 2:43
    2010年9月17日 4:40
  •  Set fs = CreateObject("Scripting.FileSystemObject")
     fs.CopyFile  "e:\webapl\alps-n\inp\A.txt", "e:\webapl\alps-n\out\START.txt", True  <=(1)
     Set fs = Nothing

    に関しては、あくまで何処で問題が起きているか確認を行うために、テスト的にいれた部分です。
    ファイルは1行のテキストファイルで巨大なファイルではありません。
    又、確認環境は1人で利用していますので、コピー処理で共有違反等起きることはありません。


    てっきり、みんなで一斉にアクセスするからデッドロックしているのかと思っていたのですが、1人だけがアクセスしても現象は再現するのでしょうか?
    2010年9月17日 4:58
  • こんにちは。

    はい、一人しか確認用のWebサーバは使用していません。
    この状態で今も現象が発生しました。

    対応は、サーバのリブートかインターネットサービスの再実行しかない状態です。

    ファイル出力のログを確認しているのですが、問題発生時ASPは何も動作していないようです。

     

    2010年9月17日 6:17
  • はい、一人しか確認用のWebサーバは使用していません。
    この状態で今も現象が発生しました。

    対応は、サーバのリブートかインターネットサービスの再実行しかない状態です。


    なるほど。1人だけが1本のリクエストをするだけでも現象は再現するのですね。K.Oumi さんの睨み通り、結構単純な原因であるように思います。
    ログの出方からすると、現象は Application 変数がらみのデッドロックですので、そのあたりを重点的に見直すのもありかと。
    (Lock だけして Unlock していないとか、呼び出している COM の内部で Application 変数の Lock をしているとか)

    ダンプを解析するのが王道のようにも思えますけれども。

    ファイル出力のログを確認しているのですが、問題発生時ASPは何も動作していないようです。


    global.asa はどうですか?Session_OnStart とか Session_OnEnd とかないですか?
    • 回答の候補に設定 星 睦美 2010年9月29日 4:03
    • 回答としてマーク 星 睦美 2010年10月1日 2:43
    2010年9月17日 7:01
  • こんにちは。

    global.asaでは、Session_OnStart やSession_OnEndの項目はあります。
    実際の内容を記入します。(DB名やユーザー名は変更してあります)
    Session_OnEndはApplication.unlockがコメントになっていました。これは問題でしょうか?

    <SCRIPT LANGUAGE=VBScript RUNAT=Server>
    SUB Session_OnStart
        Session.Timeout = 60  '分
        Server.ScriptTimeout = 600 '秒
        Application.lock
        Application("intTtlCnt")= Application("intTtlCnt") + 1
        Application.unlock

        Session("DataBaseName") = "DB"
        Session("DBUSER")="USR1"
        Session("DBPASS")="PAS"
    END SUB
    </SCRIPT>
    <SCRIPT LANGUAGE=VBScript RUNAT=Server>
     SUB Session_OnEnd
        Application.lock
        Application("intTtlCnt")= Application("intTtlCnt") - 1
        'Application.unlock
     END SUB
    </SCRIPT>

    2010年9月17日 7:48
  • Session_OnEndはApplication.unlockがコメントになっていました。これは問題でしょうか

    大問題です。
    2010年9月17日 7:54
  • おはよう御座います。

    即刻直しました。
    これで様子を見てみたいと思います。

     

    2010年9月21日 1:13
  • こんにちは。

    global.asaのApplication.unlockを抜けなく実施するように設定変更を行い約3日たちました。
    今のところ、問題の症状は出ていません。
    今まで、2日以上現象が発生しないことは無かったので、これで直っていることに期待をしています。
    今まで、windows2003環境は一人の使用で確認を行ってきましたが、今日から複数人での確認に切り換えています。
    今日問題が発生しない様であれば、来週からは本番を停止し全員がwindows2003の環境を使用する予定です。

    Application.unlockが入っていないミスは約10年以上続いていました。
    windowsNT,windows2000の間は問題は発生しませんでしたが、windows2003となってから現象が発生しました。
    今までの環境で問題が発生していなかったことは偶然(運が良かった)と思っています。

    又、状況が変わりましたら、報告いたします

    2010年9月24日 7:08
  • こんにちは。

    一人での確認環境を三日利用し、全員での確認環境を三日利用し、問題の症状は発生しておりません。
    Application.unlockが入っていなかったことが原因と特定できたと思います。
    原因がこんなに初歩的な内容と判明し、びっくりしています。
    先にも書きましたが、windowsNTや2000で動作させていた約10年間で現象が出なかった事は
    幸運だったのだと感じました。

    私の抽象的な質問にたくさんの方からアドバイスをいただき、問題の解決を行うことが出来ました。
    有り難う御座いました。

    2010年9月29日 2:17
  • こんにちは、フォーラム オペレーターの星 睦美です。

    Keisuke Oyama さん、K.Oumi さん、totojo さん 回答ありがとうございます。

    morinagt さん、こんにちは

    解決の報告をいただき、私もとてもうれしいです。

    今回は全ての返信が解決までに導く重要なステップで、1つの返信だけに[回答としてマーク]することは
    難しいと思いましたので、同様の問題をもってTechNet フォーラムに投稿される方に参考になりそうなスレッドに
    [回答としてマーク]をさせていただきました。

    K.Oumi さんの応援と、totojo さんの「大問題です」の返信には特にマークしたいです。
    皆さんの返信を読ませていただきなだがら、TechNet フォーラムのちからを感じました。

    今後ともTechNet フォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレーター 星 睦美
    2010年10月1日 2:42