共用方式為


針對 Azure Windows 虛擬機上的高 CPU 問題進行疑難解答

適用於:✔️ Windows VM

摘要

效能問題會發生在不同的作業系統或應用程式中,而每個問題都需要唯一的疑難排解方法。 這些問題大多圍繞 CPU、記憶體、網路和輸入 /輸出 (I/O) 作為問題發生的關鍵位置。 每個區域都會產生不同的癥狀(有時同時),而且需要不同的診斷和解決方案。

本文討論執行 Windows 操作系統的 Azure 虛擬機器 (VM) 上發生的高 CPU 使用量問題。

Azure Windows VM 上的高 CPU 問題

除了 I/O 和網路等待時間問題之外,CPU 和記憶體疑難解答還需要與內部部署伺服器相同的工具和步驟。 Microsoft通常支援的工具之一是 PerfInsights (適用於 Windows 和 Linux)。 PerfInsights 可以在用戶易記的報告中提供 Azure VM 最佳做法診斷。 PerfInsights 也是一種包裝函式工具,可根據工具內選取的旗標,協助收集 Perfmon、Xperf 和 Netmon 數據。

大部分用於內部部署伺服器的現有效能疑難解答工具,例如 Perfmon 或 Procmon,都會在 Azure Windows VM 上運作。 不過,PerfInsights 是針對 Azure VM 明確設計來提供更多深入解析,包括 Azure 最佳做法、SQL 最佳做法、高解析度 I/O 延遲圖表、CPU 和記憶體索引卷標等等。

無論是以使用者模式或內核模式執行,使用中進程的任何線程都需要 CPU 週期來執行其建置來源的程式代碼。 許多問題都與工作負載直接相關。 伺服器上存在的工作負載種類會驅動資源耗用量,包括CPU。

常見因素

在高 CPU 的情況下,下列因素很常見:

  • 最近的程式代碼變更或部署,主要適用於 網際網路資訊服務 (IIS)、Microsoft SharePoint、Microsoft SQL Server 或第三方應用程式等應用程式。

  • 可能與OS層級更新或應用層級累積更新和修正相關的最近更新。

  • 查詢變更或過期的索引。 SQL Server 和 Oracle 資料層應用程式也有查詢計劃優化作為另一個因素。 數據變更或缺少適當的索引,可能會導致數個查詢更密集計算。

  • Azure VM 專屬。 某些進程,例如 RDAgent,以及擴充特定進程,例如監視代理程式、MMA 代理程式或安全性用戶端,可能會導致高 CPU 耗用量。 這些程式必須從設定或已知問題的觀點來檢視。

對問題進行疑難排解

本文著重於隔離有問題的程式。 進一步分析將專屬於推動高 CPU 耗用量的程式。

例如,如果進程是 SQL Server(sqlservr.exe),接下來的步驟是分析哪個查詢在特定時段內使用最多 CPU 週期。

界定問題的範圍

以下是針對問題進行疑難解答時要詢問的幾個問題:

  • 是否有問題的模式? 例如,高 CPU 問題是否發生在每天、每周或月份的特定時間? 如果是,您可以將此問題與作業、報表或使用者登入產生關聯嗎?

  • 高 CPU 問題是否在最近的程式代碼變更之後啟動? 您是否在 Windows 或應用程式中套用更新?

  • 高 CPU 問題是否在工作負載變更之後啟動,例如用戶數目增加、數據流入增加或報告數目較多?

  • 針對 Azure,高 CPU 問題是否在下列任一情況下啟動?

    • 在最近的重新部署或重新啟動之後
    • 當 SKU 或 VM 類型變更時
    • 新增擴充功能時
    • 負載平衡器變更之後

Azure 注意事項

瞭解您的工作負載。 當您選取 VM 時,當您查看整體每月裝載成本時,可能會低估虛擬 CPU (vCPU) 計數。 如果您的工作負載需要大量計算,請選取具有一或兩個 vCPU 的較小 VM SKU 可能會導致工作負載問題。 測試工作負載的不同組態,以判斷所需的最佳計算功能。

某些 VM 系列,例如 B(高載模式)系列,建議用於質量保證 (QA) 和測試。 在生產環境中使用這些系列會限制 CPU 點數耗盡之後的計算功能。

對於 SQL Server、Oracle、RDS(遠端桌面服務)、Azure 虛擬桌面、IIS 或 SharePoint 等已知應用程式,有 Azure 最佳做法文章包含這些工作負載最低設定的建議。

持續發生高 CPU 問題

如果問題目前發生,這是擷取進程追蹤以判斷造成問題的原因的最佳機會。 您可以使用已用於內部部署 Windows 伺服器的現有工具來找出程式。 Azure VM 的 Azure 支持建議使用下列工具。

PerfInsights

PerfInsights 是 VM 效能問題的 Azure 支援 建議工具。 其設計目的是要涵蓋 CPU、記憶體和高解析度 I/O 圖形的最佳做法和專用分析索引標籤。 您可以透過 Azure 入口網站 或從 VM 內執行 OnDemand。 您可以與 Azure 支援 小組共享數據。

執行 PerfInsights

PerfInsights 適用於 WindowsLinux 作業系統。 針對 Windows,以下是選項。

透過 Azure 入口網站 執行及分析報告

透過 Azure 入口網站 安裝時,實際上會在 VM 上安裝擴充功能。 使用者也可以直接移至 VM 刀鋒視窗中的 [擴充功能],然後選擇 [效能診斷] 選項,將 PerfInsights 安裝為擴充功能。

Azure 入口網站 選項 1

流覽 VM 刀鋒視窗,然後選取 [ 效能診斷 ] 選項。 系統會要求您在選取選項的 VM 上安裝選項(使用擴充功能)。

[效能診斷] 選項中 [安裝效能診斷] 按鈕的螢幕快照。

Azure 入口網站 選項 2

流覽至 [VM] 刀鋒視窗中的 [ 診斷和解決問題 ],並尋找 VM 效能問題

診斷和解決問題選項中 VM 效能問題的螢幕快照。

如果您選取 [ 疑難解答],PerfInsights 安裝畫面就會載入。

如果您選取 [ 安裝],安裝會提供不同的集合選項。

[效能診斷] 選項中效能分析設定的螢幕快照。

螢幕快照中的編號選項與下列批注相關:

  1. 針對 [高 CPU] 選項,選取 [效能分析] 或 [進階]。

  2. 當您在這裡新增徵兆時,這些徵兆會新增至報表,以協助您與 Azure 支援共用資訊。

  3. 選取數據收集的持續時間。 針對 [高 CPU] 選項,選取至少 15 分鐘以上。 在 Azure 入口網站 模式中,您最多可以收集 15 分鐘的數據。 在較長的集合期間內,您必須以 VM 內的可執行檔身分執行程式。

  4. 如果 Azure 支援要求您收集此數據,您可以在這裡新增票證號碼。 這是選用欄位。

  5. 選取此欄位以接受最終使用者許可協定(EULA)。

  6. 如果您想要將此報告提供給 Azure 支援小組協助,請選取此字段。

報表會儲存在您的訂用帳戶底下的其中一個記憶體帳戶上。 稍後可供檢視及下載。

從 VM 內執行 PerfInsights

如果您想要執行 PerfInsights 持續時間較長,可以使用這個方法。 PerfInsights 文章提供執行 PerfInsights 作為可執行檔所需的不同命令和旗標的詳細逐步解說。 基於高 CPU 使用量的目的,您需要下列其中一種模式:

  • 進階案例

    • PerfInsights /run advanced xp /d 300 /AcceptDisclaimerAndShareDiagnostics
  • VM 緩慢 (效能) 案例

    • PerfInsights /run vmslow /d 300 /AcceptDisclaimerAndShareDiagnostics /sa <StorageAccountName> /sk <StorageAccountKey>

命令輸出會位於您儲存 PerfInsights 可執行檔的相同資料夾中。

報表中要尋找的內容

執行報表之後,內容的位置取決於內容是透過 Azure 入口網站 還是可執行文件執行。 針對任一選項,請存取產生的記錄檔資料夾,或在本機下載 (如果 Azure 入口網站),以進行分析。

執行 Azure 入口網站

高效能診斷的螢幕快照。

[效能診斷報告] 頁面中 [下載報告] 按鈕的螢幕快照。

從 VM 內執行

您的資料夾結構應該類似下列影像:

資料夾結構中輸出資料夾和 PerfInsight 報表 HTML 檔案的螢幕快照。

資料夾結構中GeneralCounters_000001.blg 和 System.evtx 的螢幕快照。

  1. 您可以在 [輸出] 資料夾中找到任何其他集合,例如 Perfmon、Xperf、Netmon、SMB 記錄檔、事件記錄等等。

  2. 實際報告與分析和建議。

  3. 針對效能 (VMlow) 和進階,報表會在 PerfInsights 執行期間收集效能 資訊。

  4. 事件記錄會顯示實用系統層級或進程當機詳細數據的快速檢視。

從哪裡開始

開啟 PerfInsights 報表。 [結果] 索引標籤會記錄資源耗用量的任何極端值。 如果有高 CPU 使用量的實例,[ 結果] 索引 標籤會將它分類為高影響或中等影響。

PerfInsights 報表頁面 CPU 部分中 [結果] 索引標籤的螢幕快照。在此範例中,影響層級為中。

與上一個範例類似,PerfInsights 執行了 30 分鐘。 該時間的一半,醒目提示的進程正在耗盡較高端的CPU。 如果相同的程式已在收集期間執行,影響層級會變更為 HIGH

如果您展開 [尋找] 事件,您會看到數個主要詳細數據。 索引標籤會依平均 CPU 耗用量依遞減順序列出進程,並顯示進程是否與系統、Microsoft擁有的應用程式(SQL、IIS)或第三方進程有關。

更多詳細資料

CPU 底下有專用的子表,可用於詳細模式分析、每個核心或每個進程。

[ 熱門 CPU 取用者] 索引 標籤有兩個不同的區段,您可以在這裡檢視每個處理器統計數據。 應用程式設計經常是單個線程或將本身釘選到單一處理器。 在此案例中,一或幾個核心會以 100% 的速度執行,而其他核心則會在預期的層級執行。 這些案例比較複雜,因為伺服器上的平均 CPU 似乎如預期般執行,但固定在高使用量核心上的進程會比預期慢。

[PerfInsights 報告] 頁面 [CPU 部分] 索引標籤的螢幕快照,其中顯示 [效能診斷分析期間] 和 [高 CPU 使用量週期]。

第二個區段(同樣重要),是 頂級長時間執行的CPU取用者。 本節顯示進程詳細數據和其 CPU 使用量模式。 清單的排序方式是在頂端具有高平均CPU取用者。

Top Long Running CPU Consumers 區段的螢幕快照。

這兩個索引標籤將足以設定後續疑難解答步驟的路徑。 根據驅動高 CPU 條件的程式而定,您必須解決稍早詢問的問題。 SQL Server (sqlservr.exe) 或 IIS (w3wp.exe) 等程式需要對造成此條件的查詢或程式代碼變更進行特定的向下切入。 針對 WMI 或 Lsass.exe 等系統進程,您必須遵循不同的路徑。

針對 RDAgent、OMS 和監視擴充功能可執行檔等 Azure VM 相關程式,您可能需要從 Azure 支援小組取得協助來修正新的組建或版本。

Perfmon

Perfmon 是針對 Windows Server 上的資源問題進行疑難解答的最早工具之一。 它不會提供具有建議或結果的明確報告。 相反地,它需要使用者探索收集的數據,並使用不同計數器類別下的特定篩選。

PerfInsights 會將 Perfmon 收集為 VMSlow 和進階案例的額外記錄。 不過,Perfmon 可以獨立收集,並具有下列額外優點:

  • 它可以從遠端收集。

  • 它可以透過工作排程。

  • 您可以使用變換功能來收集較長的持續時間或連續模式。

請考慮 PerfInsights 中顯示的相同範例,以瞭解 Perfmon 如何顯示此數據。 必要的計數器類別如下:

  • 處理器資訊 > %Processor Time > _Total

  • 進程 > %ProcessorTime > 所有實例

從哪裡開始

Perfmon 的輸出檔名具有 .blg 擴展名。 您可以獨立收集這些檔案,或使用 PerfInsights。 在此討論中,您將使用 PerfInsights 數據中包含的 Perfmon,以及根據先前範例收集的 Perfmon .blg

Perfmon 中沒有可用的預設使用者就緒報告。 有不同的檢視會變更圖表類型,但程序過濾(或識別罪魁禍首程式所需的工作)是手動的。

注意

PAL 工具可以取用.blg檔案並產生詳細的報告。

若要開始,請選取 [ 新增計數器] 類別。

  1. [可用的計數器] 下,選取 [處理器資訊類別] 中的 %ProcessorTime 計數器。

  2. 選取 [_Total,提供您所有合併核心的統計數據。

  3. 選取 [新增]。 視窗會顯示 [新增計數器] 底下的 %ProcessorTime

效能監視器 中 [新增計數器] 對話框的螢幕快照。

載入計數器之後,您會在收集時間範圍內看到折線趨勢圖。 您可以選取或清除計數器。 到目前為止,您只新增了一個計數器。

集合時間範圍內折線趨勢圖的螢幕快照。

每個計數器都會有 AverageMinimumMaximum 值。 將焦點放在 AverageMaximum 值上,因為平均值可能會根據數據收集的持續時間而有所不同。 如果看到高 CPU 活動 10 分鐘,而整體集合為 40 分鐘,則平均值會低得多。

上一個趨勢圖顯示 ,總處理器 大約15分鐘的範圍接近80%。

識別程式

我們識別出伺服器在指定的時間內具有高 CPU 耗用量,但我們尚未識別驅動程式。 不同於使用 PerfInsights,在此情況下,您必須手動搜尋罪魁禍首程式。

針對這項工作,您必須清除或移除先前新增的 %ProcessorTime 計數器,然後新增類別:

  • 進程 > %ProcessorTime > 所有實例

此類別會載入當時執行之所有進程的計數器。

新增類別的步驟螢幕快照。

在典型的生產計算機上,可以執行數百個或進程。 因此,可能需要一段時間才能清除似乎具有低或平面趨勢圖的每個計數器。

若要加速此程式,請使用 直方圖 檢視,並將檢視類型從 線條 變更為 直方圖,這會為您提供條形圖。 您會發現選擇在收集期間遇到高CPU使用量的進程會比較容易。

因為 Total 永遠會有一個橫條,因此將焦點放在顯示高耗盡率的橫條上。 您可以刪除其他列來清除檢視。 現在,請切換回 [線條 ] 檢視。

效能監視器 中直方圖檢視按鈕的螢幕快照,以及包含顯示高耗盡率的 2 列範例圖表。

現在更容易捕捉罪魁禍首程式。 根據預設, MaxMin 值是伺服器上核心數目的倍數,或進程的線程。

折線趨勢圖的螢幕快照,其中清楚顯示罪魁禍首程式。

可用的工具清單不會以 Perfmon 的 PerfInsights 結尾。 您可以存取其他工具,例如 ProcessMonitor (ProcMon) 或 Xperf。 有許多第三方工具可供視需要使用。

Azure 監視工具

Azure VM 具有可靠的計量,其中包含基本資訊,例如 CPU、網路 I/O 和 I/O 位元組。 針對進階計量,例如 Azure 監視器,您只需要進行一些選擇,才能設定及使用您指定的記憶體帳戶。

基本 (預設) 計數器

Azure 監視器 [計量] 頁面的螢幕快照。在此範例中,已選取 [匯總] 設定中的 [百分比 CPU] 選項。

啟用 Azure 監視器

啟用 Azure 監視器計量之後,軟體會在 VM 上安裝擴充功能,然後開始收集細微計量,其中包括 Perfmon 計數器。

[診斷設定] 頁面 [概觀] 索引標籤中 [診斷記憶體帳戶] 字段的螢幕快照。

基本計數器類別會設定為預設值。 不過,您也可以設定 Custom 集合。

[診斷設定] 頁面 [性能計數器] 索引標籤中 [基本類別] 選項的螢幕快照。

啟用設定之後,您可以在 [計量] 區段中檢視這些體計數器 如果計量達到特定閾值,您也可以設定 警示 (包括電子郵件訊息)。

[計量命名空間] 字段的螢幕快照,以及 [計量] 頁面中的 [新增警示規則] 按鈕。

如需如何使用 Azure 監視器來管理 Azure VM 的詳細資訊,請參閱 使用 Azure 監視器監視 Azure 虛擬機。

反應式疑難解答

如果問題已經發生,您必須先找出造成高 CPU 問題的原因。 反應性的立場可能很棘手。 數據收集模式不會那麼有用,因為問題已經發生。

如果此問題是一次性發生,可能很難判斷哪個應用程式造成此問題。 如果 Azure VM 已設定為使用 OMS 或其他診斷追蹤,您仍然可以取得造成問題的深入解析。

如果您正在處理重複模式,請在問題可能發生於下一次期間收集數據。

PerfInsights 還沒有 排程的執行 功能。 不過,Perfmon 可以透過命令行執行和排程。

Logman 命令

Logman Create Counter 命令可用來透過命令行執行 Perfmon 集合、透過任務管理器排程它,或從遠端執行。

範例 (包括遠端收集模式)

Logman create counter LOGNAME -u DOMAIN\USERNAME * -f bincirc -v mmddhhmm -max 300 -c "\\SERVERNAME\LogicalDisk(*)\*" "\\SERVERNAME\Memory\*" "\\SERVERNAME\Network Interface(*)\*" "\\SERVERNAME\Paging File(*)\*" "\\SERVERNAME\PhysicalDisk(*)\*" "\\SERVERNAME\Process(*)\*" "\\SERVERNAME\Redirector\*" "\\SERVERNAME\Server\*" "\\SERVERNAME\System\*" "\\SERVERNAME\Terminal Services\*" "\\SERVERNAME\Processor(*)\*" "\\SERVERNAME\Cache\*" -si 00:01:00

Logman.exe也可以從相同 VNET 中的對等 Azure VM 電腦啟動。

若要深入瞭解這些參數,請參閱 logman create counter

在發生問題時收集 Perfmon 數據之後,分析數據的其餘步驟與先前討論的步驟相同。

結論

對於任何效能問題,瞭解您的工作負載是解決問題的關鍵。 不同的 VM SKU 和不同磁碟記憶體選項上的選項必須藉由將焦點放在生產工作負載上來評估。 在不同 VM 上測試解決方案的程式可協助您做出最佳決策。

因為使用者作業和數據量會有所不同,因此一律會在 VM 的運算、網路和 I/O 功能中保留緩衝區。 現在,工作負載中的任何突然變更都不會有太大的影響。

如果您預計工作負載很快就會增加,請移至具有更多運算能力的較高 SKU。 如果工作負載需要大量計算,請明智地選擇 VM SKU。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。