7

Windows Server 2008、IIS 7.5 で実行されている ASP.NET アプリケーションでワーカー スレッドを生成します。このワーカー スレッドが最初に行うことは、N 秒間スリープし、その後、実際の作業を行います。スリープ中に、ThreadAbortException をキャッチします。

この動作を説明していただけますか。おまけとして、動作を調整するために使用できる IIS/ASP.NET 設定を教えてください。

編集:詳細。ThreadAbortException をキャッチするという提案は、問題を回避するのに役立ちました。ありがとうございます。私が学んだことに基づいてこの質問の文言を完全に書き直しましたが、それでも同じ質問、なぜこのワーカースレッドがスリープ中に中止されるのですか?

4

1 に答える 1

6

ThreadAbortException他の誰かがそれを呼び出したためにワーカー スレッドでAが発生するThread.Abortため、おそらくワーカー スレッドが直接行ったものではなく、何らかの外的原因によるものです。最初に確認する必要があるのは、実行する可能性のあるスレッド管理または中止の独自のコードです。それ以外の場合、IIS の場合、これはワーカー プロセス (w3wp.exe) またはアプリ プール、または AppDomain のリサイクルが原因である可能性があります。

リサイクルは、アプリ プールのアイドル タイムアウト設定、定期的にスケジュールされたリサイクル、またはメモリ/CPU 使用トリガーが原因である可能性があります。これらは、サーバー エクスプローラー (Win 2K8 の場合) の IIS 構成マネージャーを使用するか、inetmgr.exe を実行するだけで構成できます。Tess のブログ(こちら) によると、AppDomain のリサイクルには他にも多くの理由があります。

  • Machine.Config、Web.Config、または Global.asax が変更されている
  • bin ディレクトリまたはその内容が変更されている
  • 再コンパイル (aspx、ascx、または asax) の数が、machine.config または web.config の設定で指定された制限を超えています (既定では、これは
  • 仮想ディレクトリの物理パスが変更されました
  • CAS ポリシーが変更されました
  • Web サービスが再起動されます
  • (2.0 のみ) アプリケーション サブディレクトリが削除される

そのブログ投稿には、リサイクルが発生した理由を追跡するための情報も含まれています。まず、イベント ログ (eventvwr.msc) を調べて、詳細な情報があるかどうかを確認してください。

ワーカー プロセスを直接デバッグすることもできます。コードが実行される w3wp.exe インスタンスに VS デバッガーをアタッチし、ブレークポイントを追加しThread.Abort(デバッガー オプションで ".NET Framework ソース ステップ実行" を有効にする必要がある場合があります)、Abortコール スタックを使用して がどこから発生したかを確認します。窓。なぜそれが起こっているのかはわかりませんが、少なくとも誰がそれをしているのかはわかります.

于 2010-08-25T04:55:32.980 に答える