2012-06-07 43 views
29

Thomas Marquardtによるfollowingの記事では、ASP.Net要求、実行するように構成できる最大/最小CLRワーカースレッド/ Managed IOスレッド、関連するさまざまな要求キュー、およびそれらの既定サイズをIISがどのように処理するかについて説明しています。ASP.NET IIS - 要求はいつキューに入れられますか?

今品につきとして、以下がIIS 6.0で発生します。

  1. ASP.NETは、IIS IOスレッド
  2. にIIS IOスレッドと投稿からのリクエスト「HSE_STATUS_PENDING」を拾っ要求されますCLRワーカースレッドに引き渡す
  3. 要求のレイテンシが高く、すべてのスレッドが占有されている(スレッド数がhttpRuntime.minFreeThreadsに近づいている)場合、要求はアプリケーションレベルの要求キューに送信されます(このキューはAppDomainごとです) )
  4. また、ASP.NETは同時に実行されている要求の数をチェックします。記事は、私が「同時実行要求の数が多すぎると、」それはASP.NETグローバル要求キュー(これはワーカープロセスごとにある) (アップデート2をご確認ください)

に着信要求をキューに入れることを述べてASP.NETが現在実行している要求の数が多すぎるとみなし、グローバルASP.NET要求キューへの要求のキューイングを開始する「しきい値」が何であるかを知りたいですか?

このしきい値はワーカースレッドの最大数の設定に依存すると考えられますが、同時に実行する要求の数が高すぎるとASP.NETが判断して、 ASP.NETグローバル要求キューこの式は何でしょうか?またはこの設定は構成可能ですか?


Iが再び記事を読み、コメントセクションで私はこの見出さ
更新:IIS 6でとIIS 7クラシックモードで

1)、各アプリケーション(アプリケーションドメイン) には、ワーカー スレッドの可用性を維持するために使用するキューがあります。使用可能なワーカースレッドの数 が httpRuntime minFreeThreadsで指定された制限を下回ると、このキュー内の要求の数が増加します。 httpRuntime appRequestQueueLimitで指定された制限を超えた場合、要求は であり、503のステータスコードで拒否され、クライアントは "サーバーがビジー状態です"というメッセージで HttpExceptionを受信します。 ASP.NETパフォーマンスカウンター「アプリケーションキュー内の要求」には、 にはキュー内の要求数が示されています。はい、CLRスレッド プールは、.NET ThreadPoolクラスによって公開されたものです。

2)requestQueueLimitの名前が正しくありません。実際には、ASP.NET によって同時に処理できる要求の最大数は に制限されています。これには、キューに入れられている要求と、実行中の要求の両方が含まれます( )。 "Requests Current"のパフォーマンス カウンタがrequestQueueLimitを超えている場合、新しい受信要求は が503のステータスコードで拒否されます。

だから、基本的にrequestQueueLimitは(私はそれがアプリケーション・キューにキューイング要求の数を加えたグローバルASP.Net要求キュープラス現在実行中の要求の数を合計すると仮定しています)キューイングされた要求の数を制限実行中です。すべてこれは元の質問に答えるものではありませんが、同時に発生するリクエスト数/待ち時間の長いリクエストのためにサーバーのビジー状態が503になったときの情報を提供します。


アップデート2 (更新2を確認してください)を理解する上で、私の一部に誤りがありました。私はIIS 6とIIS 7の説明を混同していました。
ASP.NETがIIS 7.5と7.0で統合モードでホストされている場合、アプリケーションレベルのキューはもはや存在せず、ASP.NETはグローバル要求キューを維持します。
したがって、実行要求の数が多いとみなされる場合、IIS 7/7.5はグローバル要求キューに要求をキューイングし始めます。質問は、IIS 7/7.5以上を適用するのではなく限り6.

は6.0が懸念しているIIS、そこには世界的なASP.NET要求キューはありませんが、以下は真である:
1. ASPで。 NETがIIS IOスレッドから要求を取得し、IIS IOスレッドに "HSE_STATUS_PENDING"を投稿します。
2.要求がCLRワーカースレッドに引き渡されます。
3.要求が高遅延であり、すべてのスレッドが占有されている(スレッド数がhttpRuntime.minFreeThreadsに近づく)、要求はアプリケーションレベルの要求キューに送信されます(このキューはAppDomainごとです)
4.また、ASP.NETは、新しい要求を受け入れる前に、キューに入れられ、現在実行中の要求の数をチェックします。この数値がprocessModel.requestQueueLimitで指定された値より大きい場合、着信要求は503サーバービジーエラーで拒否されます。

+0

質問に追加された更新により、IIS 7/7.5との関連性は低くなる可能性があります。更新プログラムはIIS 6.0に関する回答を提供します – Ngm

+0

リンク先の記事には、しきい値がMaxConcurrentRequestsPerCPUによって決定されることが記載されています。これが当てはまるとは思わない理由はありますか? – RandomEngy

答えて

2

This article設定を少し良く理解するのに役立つかもしれません。

minFreeThreads:この設定は で利用可能なスレッドの数は、スレッドプールは、この設定の値を下回った場合は、すべての着信要求をキューにワーカープロセスで使用されています。この設定値 は、同時に実行できる要求の数を実質的に maxWorkerThreads minFreeThreadsに制限します。 minFreeThreadsを88 *#of CPUに設定します。これにより、同時要求の数が12に制限されます( maxWorkerThreadsが100であると仮定します)。

編集:このSO post

、トーマスは、統合パイプラインで、より詳細かつ要求処理の例を示します。追加の説明については、解説のコメントを必ず読んでください。

(webengine.dllで)ネイティブコールバックはCLRワーカー スレッド上の要求をピックアップし、我々は アクティブな要求を合計するmaxConcurrentRequestsPerCPU *たCPUCountを比較します。制限を超えた場合、要求は グローバルキュー(ネイティブコード)に挿入されます。それ以外の場合は、実行されます。 がキューに入れられた場合、アクティブな要求の1つが完了すると、そのキューはデキューされます。

+0

はい、IIS 6.0で動作します。要求が高遅延で、すべてのスレッドが占有されている場合(スレッド数がhttpRuntime.minFreeThreadsに近づく)、要求はアプリケーションレベルの要求キューに送信されます(このキューはAppDomainごとにあります) – Ngm

+0

それは古典的なアプリケーションプールにのみ適用されます。 – ulty4life

関連する問題