共用方式為


案例 1:使用 ETW 追蹤和 Netsh 命令的 HTTP 逾時範例

透過 ETW 追蹤,可以檢查透過 HTTP Server API 元件的數據流來診斷問題。 例如,Web 應用程式的使用者可能會在瀏覽器中看到網頁無法顯示的錯誤訊息。 在裝載 Web 應用程式的伺服器上,IT 專業人員也會在 HTTP 錯誤記錄檔中看到連線逾時專案,如下圖所示。 您可以在下列目錄中找到 HTTP 錯誤記錄檔:%windir%\System32\LogFiles\HTTPERR\。

顯示 netsh H T P 命令視窗的螢幕快照,其中顯示 H T T P 錯誤記錄檔的逾時。

圖 1:逾時 HTTP 錯誤記錄檔

產生 ETW 追蹤報表

若要產生 HTTP 伺服器 API 元件的 ETW 追蹤報告,請從命令提示字元執行下列步驟。 在此範例中,追蹤會在伺服器上執行,因為它裝載 Web 應用程式。

下列步驟會產生名為 HTTPtrace.etl 的追蹤,然後將追蹤轉換成名為 httptrace.csv的 CSV 檔案。 如下所示,HTTP Server API 的 ETW 提供者稱為 Microsoft-Windows-HttpService。 0xFFF命令行選項表示應該擷取此提供者的所有 ETW 事件。

產生 ETW 追蹤報表

  1. 啟動 HTTP Server API 元件的 ETW 追蹤:logman.exe 啟動 httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets
  2. 重現問題,使其可在追蹤中擷取。 在此範例中,從用戶端計算機存取 Web 應用程式,導致用戶端上顯示的 「頁面無法顯示」訊息」 訊息。
  3. 現在問題已重現,請停止追蹤:logman.exe 停止 HTTPtrace –ets
  4. 將報表轉換成 CSV 格式:tracerpt.exe HTTPtrace.etl -of CSV -o httptrace.csv
  5. 檢視追蹤報表。 CSV 追蹤的摘錄如下表 1 所示。

檢視追蹤和診斷

產生的追蹤 CSV 檔案可以在 Excel 或任何支援 CSV 格式的工具中檢視。 下表 1 顯示範例追蹤檔案 (httptrace.csv) 的摘錄。 在追蹤報告中,[層級] 資料行會顯示值為 「3」 的專案,其對應於 ETW 中的警告。 HTTP Server API 元件遵循 系統 ETW 提供者事件關鍵詞層級設定中所定義的 ETW 層級,。 ETW 層級包括:

水準 意義
1 危急
2 錯誤
3 警告
4 Infomational
5 詳細

 

使用此警告時,事件類型 (Type 數據行) 會報告 「ConnTimedOut」。 在 ConnTimeOut 事件的後續數據行中,過期的特定定時器會回報為「Timer_ConnectionIdle」。 請注意,為了簡潔起見,數據表中不包含具有 「Timer_ConnectionIdle」 項目的數據行,並避免摘錄非連續數據行。

事件名稱 類型 事件標識碼 版本 管道 水準
EventTrace 頁眉 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 伺服器 API 元件所裝載的所有伺服器應用程式。 這些變更會持續於元件的重新啟動和計算機的重新啟動。 Netsh HTTP 命令可在 Windows Vista 和 Windows Server 2008 中使用,並在 Windows Vista 和 Windows Server 2008 上執行時取代 Windows Server 2003 資源套件的 HttpCfg.exe 工具。 在此案例中,我們將調整逾時值,然後驗證解決方案。 HTTP 伺服器 API 元件中有定時器,以確保可用性,並防止錯誤設定或惡意使用者過度使用。 應仔細評估預設值中的定時器,以防範潛在的 DoS 攻擊。

在此範例中,Web 用戶端位於緩慢的網路連線後方,導致TIMER_CONNECTIONIDLE ETW 事件。 在考慮逾時的原因,並與伺服器負載的影響進行平衡之後,決定將逾時值增加為240秒。 您可以使用下列程式來檢視並設定定時器。

使用 Netsh 設定閒置連線時器 (Timer_ConnectionIdle)

  1. 在伺服器上,開啟提升許可權的命令視窗,然後執行下列步驟來檢視及設定逾時值。 下圖顯示 Netsh HTTP 命令的螢幕快照。
  2. 顯示目前的逾時值:Netsh http 顯示逾時
  3. 設定Timer_ConnectionIdle逾時值。 在此範例中,值會變更為 240 秒:Netsh http add timeout timeouttype=idleconnectiontimeout value=240

netsh http 命令視窗

圖 2:Netsh HTTP 命令視窗

設定逾時值之後,請重新執行 ETW 診斷步驟。 如果錯誤狀況已修正,ETW 追蹤就不應該再顯示連線閑置定時器的 ETW 層級為 “3” 的逾時。