私は Windows 8.1 を実行しており、HostableWebCore を利用して分離された ASP.NET Web サーバー プロセスを起動する統合テスト スイートを使用しています。パフォーマンス上の理由から、これらのうち 8 つを一度に起動し、起動したら、それぞれに非常に単純な Web 要求を送信します。これは、それぞれにロードされた MVC アプリケーションによって処理されます。すべてのインスタンスは異なるポートでリッスンしています。
問題は、リクエストが HTTP.sys (または最近では何と呼ばれていても) で滞っていることです (私は信じています)。フィドラーを見ると、8 つのリクエストすべてがすぐに (数ミリ秒以内に) ServerGotRequest 状態になっていることがわかります。ただし、一度に並行して実行する数に応じて、リクエストはこの状態で 20 ~ 100 秒間待機します。
これが HTTP.sys の問題であると私が疑う理由は、それらのいずれかが応答するのを待たなければならない時間が、並行してスピンアップするホスティング アプリケーションの数とともに増加するためです。ホスティング アプリケーションを 1 つだけ起動すると、20 秒以内に応答が開始されます。2 をスピンアップすると、両方とも約 30 秒で応答を開始します。4回スピンアップすると、〜40秒。8 回スピンアップすると、〜 100 秒 (デフォルトの WebClient 要求タイムアウト) になります。
この長い遅延のため、デバッガーをアタッチしてコントローラー アクションにブレークポイントを配置するのに十分な時間があります。そのブレークポイントは 20 ~ 100 秒の遅延後にヒットし、プロセスがまだ要求を受け取っていないことを示唆しています。すべてのホストは、5 ~ 10 秒間のコールド スタート CPU チャーニングの後、20 ~ 100 秒間アイドル状態になります。すべてのホストが同時にリクエストを受信しているように見えます。まるで何かがリクエストの通過をブロックしていて、突然すべてを通過させたかのようです。
私の問題は、HTTP.sys のデバッグ方法に関する情報を見つけることができなかったことです。どうすればそれが何をしているのかを見ることができますか? ブロックの原因は何ですか?ワーカーへのリクエストの転送を待っているのはなぜですか? なぜ彼らはすべて一緒にやってくるのですか?
または、これを回避してリクエストをすぐに(待たずに)受け取る方法を誰かが知っている場合は、非常に感謝しています。
別のメモ: ホスティング アプリケーションが起動するとすぐに、システム (PID 4) が指定したポートをリッスンするように登録されていることがわかります。
追加情報: これは、私のホスティング アプリの 1 つが下のように見えるものですnetsh http show servicestate
Server session ID: FD0000012000004C
Version: 2.0
State: Active
Properties:
Max bandwidth: 4294967295
Timeouts:
Entity body timeout (secs): 120
Drain entity body timeout (secs): 120
Request queue timeout (secs): 120
Idle connection timeout (secs): 120
Header wait timeout (secs): 120
Minimum send rate (bytes/sec): 150
URL groups:
URL group ID: FB00000140000018
State: Active
Request queue name: IntegrationTestAppPool10451{974E3BB1-7774-432B-98DB-99850825B023}
Properties:
Max bandwidth: inherited
Max connections: inherited
Timeouts:
Timeout values inherited
Logging information:
Log directory: C:\inetpub\logs\LogFiles\W3SVC1
Log format: 0
Number of registered URLs: 2
Registered URLs:
HTTP://LOCALHOST:10451/
HTTP://*:10451/
Request queue name: IntegrationTestAppPool10451{974E3BB1-7774-432B-98DB-99850825B023}
Version: 2.0
State: Active
Request queue 503 verbosity level: Basic
Max requests: 1000
Number of active processes attached: 1
Controller process ID: 12812
Process IDs:
12812