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

摘要

效能問題會發生在不同的操作系統或應用程式中,而且每個問題都需要唯一的方法來進行疑難解答。 這些問題大多圍繞在 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 和記憶體索引卷標等等。

不論是以 User-Mode 或內核模式執行,使用中進程的任何線程都需要 CPU 循環來執行其建置來源的程式碼。 許多問題都與工作負載直接相關。 存在於伺服器上的工作負載類型會耗用資源,包括 CPU。

常見因素

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

  • 最近的程式代碼變更或部署,大部分適用於 Internet Information Services (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

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

執行 PerfInsights

PerfInsights 適用於 WindowsLinux OS。 針對 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) 和 Advanced,報表會收集 PerfInsights 執行期間的效能資訊。

  4. 事件記錄檔會顯示實用系統層級或處理損毀詳細數據的快速檢視。

從何處開始?

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

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

與上一個範例類似,PerfInsights 執行了 30 分鐘。 在該時間內,反白顯示的程式會耗盡較高端的CPU。 如果整個收集時間都執行相同的程式,影響層級就會變更為 HIGH

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

其他詳細資料

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

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

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

第二個區段 (同樣重要的) 是 前長執行 CPU 取用者。 本節會顯示程序詳細數據及其 CPU 使用模式。 清單的排序方式是讓高平均CPU取用者位於頂端。

[Top Long Running CPU 取用者] 區段的螢幕快照。

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

針對 Azure VM 相關的程式,例如 RDAgent、OMS 和監視擴充功能可執行檔,您可能必須透過取得 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 值,因為平均值可能會因數據收集的持續時間而有所不同。 如果在整體集合為 40 分鐘時看到高 CPU 活動 10 分鐘,則平均值會低很多。

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

識別程式

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

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

  • 處理 > %ProcessorTime > 所有實例

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

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

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

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

因為 [ 總計] 一律會有橫條,所以請將焦點放在顯示高耗盡率的橫條上。 您可以刪除其他橫條來清除檢視。 現在,移回 [ 線條 ] 檢視。

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

現在可以更輕鬆地攔截到犯罪程式。 根據預設, MaxMin 值是伺服器上核心數目或進程線程數目的倍數。

折線圖的螢幕快照,其中清楚地顯示問題程式。

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

Azure 監視工具

Azure VM 具有可靠的計量,包括基本資訊,例如 CPU、網路 I/O 和 I/O 位元組。 對於進階計量,例如 Azure 監視器,您只需要選取幾個選項,即可設定及使用您指定的記憶體帳戶。

基本 (預設) 計數器

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

啟用 Azure 監視器

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

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

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

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

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

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

如需如何使用 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 意應見反社群