在遠端桌面工作階段主機上使用效能計數器來診斷應用程式效能問題

適用於:Windows Server 2022、Windows Server 2019、Windows 10

應用程式效能不佳是診斷的最困難問題之一,特別是針對緩慢或非回應的應用程式。 傳統上,您會收集 CPU、記憶體、磁碟輸入/輸出和其他計量,以開始診斷。 然後,您可以使用 Windows Performance Analyzer 之類的工具來嘗試找出造成問題的原因。 遺憾的是,在大部分的情況下,此資料無法協助您識別根本原因,因為資源耗用量計數器具有頻繁且巨大的變化。 這種情況使得難以讀取資料,並與報告的問題相互關聯。

注意

使用者輸入延遲計數器只適用於:

  • Windows Server 2019 或更新版本
  • Windows 10,版本 1809 或更新版本

使用者輸入延遲計數器可協助您快速找出造成終端使用者遠端桌面效能體驗不佳的根本原因。 此計數器會測量任何使用者輸入的時間,例如滑鼠或鍵盤使用量,會在進程挑選之前留在佇列中。 計數器在本機和遠端工作階段皆適用。

下圖顯示從用戶端到應用程式之使用者輸入流程的粗略表示法。

Diagram of user input flows from the users Remote Desktop client to the application.

「使用者輸入延遲」計數器會測量佇列輸入與傳統訊息迴圈中應用程式在接上時之間的時間間隔內 的最大差異。 傳統訊息迴圈會顯示在下列流程圖中:

Diagram of user input Delay performance counter flow.

此計數器的重要詳細資料之一是,它會在可設定的間隔內回報使用者輸入延遲上限。 此延遲是輸入到達應用程式所花費的最長時間,其可能會影響重要和可見動作 (例如輸入) 的速度。

例如,在下表中,使用者輸入延遲會在此間隔內回報為 1,000 毫秒。 計數器會報告間隔中使用者輸入延遲最快的時間。 計數器會回報此延遲,因為使用者對於「緩慢」的認知取決於他們所體驗到的最慢輸入時間 (上限),而非所有輸入總數的平均速度。

數字 0 1 2
延遲 16 毫秒 20 毫秒 1,000 毫秒

啟用並使用新的效能計數器

若要使用這些新的效能計數器,您必須先執行下列命令來啟用登錄機碼:

reg add "HKLM\System\CurrentControlSet\Control\Terminal Server" /v "EnableLagCounter" /t REG_DWORD /d 0x1 /f

注意

如果您使用的是 Windows 10 1809 版或更新版本,或是 Windows Server 2019 或更新版本,則不需啟用登錄機碼。

接下來,重新啟動伺服器。 然後,開啟效能監視器並選取加號 加號圖示 (+),如下列螢幕擷取畫面所示:

Screenshot showing how to add the User input Delay performance counter.

接下來,您應該會看到 [新增計數器] 對話方塊,讓您可在其中選取 [每個處理序的使用者輸入延遲] 或 [每個工作階段的使用者輸入延遲]

Screenshot showing how to add the User input Delay per session.

Screenshot showing how to add the User input Delay per process.

當您選取 [每個處理序的使用者輸入延遲],您將會看到格式為 SessionID:ProcessID <Process Image> 的 [所選物件的執行個體] (亦即處理序)。

例如,如果 [小算盤] 應用程式正在工作階段識別碼 1 \(英文\) 中執行,您會看到 1:4232 <Calculator.exe>

注意

並非所有處理序都會包含在內。 您將不會看到以 SYSTEM 身分執行的任何處理序。

一旦您新增它之後,計數器就會立即開始回報使用者輸入延遲。 預設會將調整上限設定為 100 (毫秒)。

Screenshot of an example of activity for the User Input Delay per process in the Performance Monitor.

接下來,請參閱每個工作階段的使用者輸入延遲。 每個工作階段識別碼都有執行個體,而其計數器會顯示指定的工作階段內任何處理序的使用者輸入延遲。 此外,有兩個執行個體分別名為「上限」(所有工作階段上的使用者輸入延遲上限) 和「平均」(所有工作階段的平均)。

下表顯示這些執行個體的視覺範例 您可以在 Perfmon 中藉由切換至 [報表] 圖表類型來取得相同資訊。

計數器類型 執行個體名稱 已報告延遲 (毫秒)
每個處理序的使用者輸入延遲 1:4232 <Calculator.exe> 200
每個處理序的使用者輸入延遲 2:1000 <Calculator.exe> 16
每個處理序的使用者輸入延遲 1:2000 <Calculator.exe> 32
每個工作階段的使用者輸入延遲 1 200
每個工作階段的使用者輸入延遲 2 16
每個工作階段的使用者輸入延遲 平均 108
每個工作階段的使用者輸入延遲 最大值 200

已超載之系統中所使用的計數器

現在讓我們看看如果應用程式的效能已降級,您會在報表中看見哪些內容。 下圖顯示從遠端在 Microsoft Word 中工作的使用者讀數。 在此情況下,隨著更多使用者從遠端登入,效能會隨著時間而降低。

Screenshot of an example performance graph for the RDSH server running Microsoft Word.

以下是閱讀圖表線條的方式:

  • 粉紅色線條顯示伺服器上已登入的工作階段數目。
  • 紅色線條是 CPU 使用量。
  • 綠色線條是所有工作階段上的使用者輸入延遲上限。
  • 藍色線條 (在此圖表中顯示為黑色) 表示所有工作階段上的平均使用者輸入延遲。

CPU 尖峰與使用者輸入延遲之間有相互關聯。 隨著 CPU 的使用量增加,使用者輸入延遲會增加。 此外,當更多使用者加入至系統時,CPU 使用量就會更接近 100%,因而導致更頻繁的使用者輸入延遲尖峰。 雖然此計數器在發生伺服器執行資源不足的情況下很有用,但它也可以追蹤與特定應用程式相關的使用者輸入延遲。

設定選項

當您使用此效能計數器時,要記住的重點是,它預設會以 1000 毫秒的間隔回報使用者輸入延遲。 如果您將效能計數器範例間隔屬性 (如下列螢幕擷取畫面所示) 設定為任何不同的項目,則所回報的值將不正確。

Screenshot of the Performance Monitor Properties dialog.

若要修正此問題,您可以設定下列登錄機碼,以符合您想要使用的間隔 (以毫秒為單位)。 例如,如果您每隔 1 秒將 Sample 變更為 Sample 每 5 秒,則必須將此機碼設定為 5000 毫秒。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]

"LagCounterInterval"=dword:00005000

注意

如果您使用 Windows 10 1809 版或更新版本,或是 Windows Server 2019 或更新版本,則不需設定 LagCounterInterval 來修正效能計數器。

我們也在相同的登錄機碼底下新增了數個您可能發現有所助益的機碼:

LagCounterImageNameFirst—將此索引鍵設定為 DWORD 1 (預設值 0 或機碼不存在)。 此機碼會將計數器名稱變更為「Image Name <SessionID:ProcessId>」,例如「explorer <1:7964>」。 如果您想要依映像名稱排序,此變更非常有用。

LagCounterShowUnknown—將此索引鍵設定為 DWORD 1 (預設值 0 或機碼不存在)。 此金鑰會顯示任何以服務或 SYSTEM 身分執行的處理序。 某些處理序會和其設定為 "?" 的工作階段一起顯示。

下圖顯示兩個機碼上的外觀:

Screenshot of the performance monitor with both keys on.

搭配非 Microsoft 工具使用新的計數器

監視工具可以藉由使用效能計數器 \(英文\) 來取用此計數器。

分享您的意見反應

您可以透過意見反應中樞來提交此功能的意見反應。 選取 [應用程式] > [所有其他應用程式],並在自己的文章標題中包含「RDS 效能計數器 - 效能監視器」。