Thomas Marquardtによる次の記事では、IISがASP.Net要求を処理する方法、実行するように構成できる最大/最小CLRワーカースレッド/管理対象IOスレッド、関連するさまざまな要求キュー、およびそれらの既定のサイズについて説明します。
記事によると、IIS6.0では次のことが発生します。
- ASP.NETは、IIS IOスレッドから要求を取得し、「HSE_STATUS_PENDING」をIISIOスレッドに投稿します。
- リクエストはCLRワーカースレッドに渡されます
- リクエストのレイテンシが高く、すべてのスレッドが占有されている場合(スレッド数がhttpRuntime.minFreeThreadsに近づく場合)、リクエストはアプリケーションレベルのリクエストキューに送信されます(このキューはAppDomainごとにあります)
また、ASP.NETは、同時に実行されている要求の数をチェックします。この記事では、「同時に実行される要求の数が多すぎる場合」、着信要求をASP.NETグローバル要求キューにキューに入れると述べています(これはワーカープロセスごとです)(更新2を確認してください)
ASP.NETが現在実行している要求の数が多すぎると見なし、グローバルASP.NET要求キューへの要求のキューイングを開始する「しきい値」とは何かを知りたいですか?
このしきい値は、ワーカースレッドの最大数の構成に依存すると思いますが、ASP.NETが同時に実行される要求の数が多すぎると判断し、ASP.NETへの要求のキューイングを開始する式がある可能性があります。グローバル要求キュー。この式は何でしょうか?または、この設定は構成可能ですか?
更新
私は記事をもう一度読み、コメントセクションでこれを見つけました:
1)IIS6およびIIS7クラシックモードでは、各アプリケーション(AppDomain)には、ワーカースレッドの可用性を維持するために使用するキューがあります。使用可能なワーカースレッドの数がhttpRuntimeminFreeThreadsで指定された制限を下回ると、このキュー内の要求の数が増加します。httpRuntime appRequestQueueLimitで指定された制限を超えると、要求は503ステータスコードで拒否され、クライアントは「サーバーがビジーです」というメッセージとともにHttpExceptionを受け取ります。ASP.NETパフォーマンスカウンター「アプリケーションキュー内の要求」もあり、キュー内の要求の数を示します。はい、CLRスレッドプールは.NETThreadPoolクラスによって公開されているものです。
2)requestQueueLimitの名前が適切ではありません。実際には、ASP.NETが同時に処理できる要求の最大数を制限します。これには、キューに入れられているリクエストと実行中のリクエストの両方が含まれます。「RequestsCurrent」パフォーマンスカウンターがrequestQueueLimitを超えると、新しい着信リクエストは503ステータスコードで拒否されます。
したがって、基本的にrequestQueueLimitは、キューに入れられて実行されている要求の数を制限します(Applicationキューにキューに入れられた要求の数とグローバルASP.Net要求キューに現在実行中の要求の数を合計すると想定しています)。これは元の質問に答えるものではありませんが、同時要求/高遅延要求の数が多いために503サーバービジーエラーが発生する可能性がある場合の情報を提供します。
(アップデート2を確認してください)
アップデート2
理解に誤りがありました。IIS6とIIS7の説明を混同していました。
基本的に、ASP.NETがIIS 7.5および7.0で統合モードでホストされている場合、アプリケーションレベルのキューは存在しなくなり、ASP.NETはグローバル要求キューを維持します。
したがって、IIS 7 / 7.5は、実行中の要求の数が多いと見なされた場合に、要求をグローバル要求キューにキューイングし始めます。この質問は、6ではなくIIS 7 / 7.5に当てはまり
ます。IIS6.0
に関する
限り、グローバルASP.NET要求キューはありませんが、次のことが当てはまり
ます。1.ASP.NETはIISIOスレッドから要求を取得します。そして、「HSE_STATUS_PENDING」をIISIOスレッド
2に投稿します。要求はCLRワーカースレッドに渡されます。
3.要求の待ち時間が長く、すべてのスレッドが占有されている場合(スレッド数がhttpRuntime.minFreeThreadsに近づく場合)、要求はアプリケーションレベルの要求キューに送信されます(このキューはAppDomainごとにあります)。4。ASP.NET
もチェックします。新しいリクエストを受け入れる前にキューに入れられ、現在実行されているリクエストの数。この数がprocessModel.requestQueueLimitで指定された値より大きい場合、着信リクエストは503サーバービジーエラーで拒否されます。