シナリオ 1: ETW トレースコマンドと Netsh コマンドを使用した HTTP タイムアウトの例
ETW トレースを使用して、HTTP Server API コンポーネントを介したデータフローを検査して問題を診断できます。 たとえば、Web アプリケーションのユーザーには、Web ページを表示できないエラー メッセージがブラウザーに表示される場合があります。 次の図 1 に示すように、WEB アプリケーションをホストしているサーバーでは、IT プロフェッショナルは HTTP エラー ログ内に接続タイムアウト エントリも表示します。 HTTP エラー ログは、%windir%\System32\LogFiles\HTTPERR\ ディレクトリにあります。
図 1: タイムアウトの HTTP エラー ログ
ETW トレース レポートの生成
HTTP Server API コンポーネントの ETW トレース レポートを生成するには、コマンド プロンプトから次の手順を実行します。 この例では、Web アプリケーションをホストしているため、トレースはサーバー上で実行されます。
次の手順では、httptrace.etl という名前のトレースを生成し、そのトレースを httptrace.csv という CSV ファイルに変換します。 次に示すように、HTTP Server API の ETW プロバイダーは Microsoft-Windows-HttpService と呼ばれます。 0xFFF コマンド ライン オプションは、このプロバイダーのすべての ETW イベントをキャプチャする必要があることを示します。
ETW トレース レポートを生成する
- HTTP Server API コンポーネントの ETW トレースを開始する: logman.exe開始 httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets
- トレースにキャプチャできるように、問題を再現します。 この例では、クライアント コンピューターから Web アプリケーションにアクセスし、"ページを表示できません" というメッセージがクライアントに表示されます。
- 問題が再現されたので、トレースを停止 します。httptrace を停止logman.exe
- レポートを CSV 形式に変換 します。tracerpt.exe httptrace.etl -of CSV -o httptrace.csv
- トレース レポートを表示します。 CSV トレースからの抜粋を表 1 に示します。
トレースの表示と診断
トレース用の結果の CSV ファイルは、Excel または CSV 形式をサポートする任意のツールで表示できます。 次の表 1 は、サンプル トレース ファイル (httptrace.csv) からの抜粋を示しています。 トレース レポートの "Level" 列には、ETW の警告に対応する値が "3" のエントリが表示されます。 HTTP Server API コンポーネントは、 System ETW プロバイダー のイベント キーワード レベル設定で定義されている ETW レベルに従います。 ETW レベルには次のものが含まれます。
Level | 意味 |
---|---|
1 | Critical |
2 | エラー |
3 | 警告 |
4 | Infomational |
5 | "詳細" |
この警告では、イベントの種類 (Type 列) は "ConnTimedOut" を報告します。 ConnTimeOut イベントの後続の列では、有効期限が切れた特定のタイマーが "Timer_ConnectionIdle" として報告されます。 "Timer_ConnectionIdle" エントリを含む列は、簡潔にするためにテーブルに含まれていないことに注意してください。また、連続しない列の抜粋を避けるためです。
イベント名 | Type | イベント ID | バージョン | チャネル | Level |
---|---|---|---|---|---|
EventTrace | Header | 0 | 2 | 0 | 0 |
Microsoft-Windows-HttpService | ChgUrlGrpProp | 28 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | AddUrl | 31 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ChgReqQueueProp | 30 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ChgUrlGrpProp | 28 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ChgSrvSesProp | 29 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ChgSrvSesProp | 29 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ConnConnect | 21 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ConnIdAssgn | 22 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | RecvReq | 1 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | [解析] | 2 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | LogFileWrite | 51 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ConnCleanup | 24 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ConnTimedOut | 53 | 0 | 16 | 3 |
表 1: タイマーの問題に関するサンプル トレース レポートからの抜粋
この例では、ヘッダー タイマー (Timer_ConnectionIdle) の有効期限 (ConnTimeOut イベント) が、エンド ユーザーが Web クライアントに "ページを表示できません" というメッセージを表示する理由です。 タイムアウトの原因として、接続が遅いために Web クライアントの送信速度が遅くなる可能性があります。 この問題に対処するために、タイムアウト値は Netsh コマンドを使用して調整できます。
Netsh によるタイムアウトの調整とソリューションの検証
以下に示す HTTP 用 Netsh コマンドを使用すると、IT プロフェッショナルは HTTP Server API コンポーネントの設定値を表示および構成できます。 Netsh HTTP コマンドによる変更は、そのマシンの HTTP Server API コンポーネントによってホストされているすべてのサーバー アプリケーションに影響します。 これらの変更は、コンポーネントの再起動とマシンの再起動の間に保持されます。 Netsh HTTP コマンドは Windows Vista および Windows Server 2008 で使用でき、Windows Vista および Windows Server 2008 で実行する場合は、Windows Server 2003 リソース キットのHttpCfg.exe ツールを置き換えます。 このシナリオでは、タイムアウト値を調整し、ソリューションを確認します。 HTTP Server API コンポーネントにはタイマーが存在し、可用性を確保し、誤って構成されたユーザーまたは悪意のあるユーザーによる過剰なコンコンスムションから保護します。 既定値からタイマーを調整するには、DoS 攻撃の可能性に対して慎重に評価する必要があります。
この例では、Web クライアントが低速ネットワーク接続の背後に存在し、ETW イベントTimer_ConnectionIdle発生します。 タイムアウトの原因と、サーバーの負荷への影響とのバランスを考慮した後、タイムアウト値を 240 秒の値に増やすことを決定します。 タイマーを表示して構成するには、次の手順を実行します。
Netsh を使用してアイドル接続タイマー (Timer_ConnectionIdle) を構成する
- サーバーで、管理者特権のコマンド ウィンドウを開き、次の手順を実行してタイムアウト値を表示および構成します。 Netsh HTTP コマンドのスクリーンショットは、下の図 2 に示されています。
- 現在のタイムアウト値を表示する: Netsh http show timeout
- Timer_ConnectionIdleタイムアウト値を構成します。 この例では、値が 240 秒に変更されます。 Netsh http add timeouttype=idleconnectiontimeout value=240
図 2: Netsh HTTP コマンド ウィンドウ
タイムアウト値を構成した後、ETW 診断手順を再実行します。 エラー状態が修正された場合、ETW トレースでは、接続アイドル タイマーの ETW レベルが "3" のタイムアウトが表示されなくなります。