本文主要介紹Windows執行個體中CPU使用率較高問題的排查及解決方案。
問題現象
Windows執行個體中CPU使用率較高,即CPU使用率≥80%。
問題原因
CPU使用率較高可能有以下原因。
執行個體遭到病毒木馬入侵。
執行個體中第三方殺毒軟體運行。
執行個體中應用程式異常、驅動異常、高I/O使用率或高中斷處理的應用程式。
解決方案
步驟一:定位問題
通過微軟工具(工作管理員、資源監視器等)抓取系統Full Memory Dump,來定位CPU使用率過高的問題。在流量大的情況下,您還可以使用Wireshark抓取一段時間的網路包,分析流量使用方式。
本文以Windows Server 2022系統資源監視器為例,介紹如何定位CPU使用率較高的問題。其他常見工具,請參見常見工具。
使用VNC遠端連線Simple Application Server。具體操作,請參見通過救援遠端連線(控制台)。
在案頭底部單擊開始菜單,選擇運行。
在運行框中輸入
perfmon -res
,單擊確定。在資源監視器頁面中,查看各進程是否有CPU使用率過高的現象。
針對佔用CPU資源較高的進程,查看對應的進程ID和進程的程式名。
開啟工作管理員,工作管理員的詳細資料頁簽下,找到之前資源監視器查看到的異常進程名和對應的PID。按右鍵進程名稱,選擇開啟檔案所在的位置(O),查看進程是否為惡意程式。
步驟二:分析處理
判斷影響CPU使用率過高的進程屬於正常進程或是異常進程,並按照下述相應步驟處理。
可能原因 | 具體操作 |
正常進程 | 一般情況下,當頻繁訪問業務,或由於Windows自身服務(更新服務等)都可能會佔用較高網路流量和CPU 。 說明
|
異常進程 | 對於CPU異常使用率過高的情況,可能是被惡意病毒、木馬入侵導致的。有時三方惡意程式可能會利用作業系統的svchost.exe或者Tcpsvcs.exe來偽裝,引起高CPU的佔用。您需要手動對異常進程進行查殺。 說明 若您無法判斷進程是否為病毒或木馬,建議將進程名稱在網上進行搜尋後確認。另外,建議您進行進程刪除操作前,建立快照完成備份。具體操作,請參見建立快照。
|
常見工具
以下是關於Windows系統中定位CPU使用率過高問題工具的簡要說明。
工作管理員
工作管理員可以直觀查看應用程式列表,定位佔用CPU較高的應用程式,如下是工作管理員頁面。
在效能頁面檢查CPU使用率時,按右鍵CPU使用率圖示,單擊
。如下圖顯示了2個邏輯CPU的使用率。
當單個進程的CPU使用率飆升至接近100%時,而其它進程的CPU使用率變化不大,則可能是網路I/O處理造成的。
資源監視器
資源監視器可以直觀查看CPU使用率,還可以通過控制代碼和模組搜尋對應的進程。
Process Explorer
Process Explorer是一款Microsoft Sysinternals工具,通過配置正確的Symbols,檢查對應應用程式的線程調用的Call Stack,用以定位可能的問題驅動。下載Process Explorer工具,請參見Process Explorer。
如下圖是Process Explorer工具使用頁面。
效能監控器
效能監控器(Performance Monitor)是Microsoft專業收集各個組件效能計數器的工具。對於系統CPU資源消耗,有多個Counter來檢查。
Performance有如下三個核心參數。
\Processor(_Total)\% Processor Time
:CPU執行非空閑線程的時間百分比。\Processor(_Total)\% Processor Time
=\Processor(*)\% User Time
+\Processor(*)\% Privileged Time
.\Processor(*)\% User Time
:表示處理器用於執行程式代碼的時間消耗,可以確定哪個應用程式或函數調用消耗了較多的時間。\Processor(*)\% Privileged Time
:應用程式在核心中執行系統調用(例如驅動、IRP,環境切換等)操作的時間。如果作業系統花費多於30%的時間在Privileged Time
,則說明執行個體進行中高I/O吞吐相關的操作。當
% Privileged Time
很高時,需要進一步檢查% DPC Time
、% Interrupt Time
以及Context Switches/sec
的情況。高
% DPC Time
、% Interrupt Time
表示未知裝置出現大量的操作或者很差的效能問題。更多詳情,請參見Choose Your Own Adventure: High Deferred Procedure Calls (DPCs) or High Interrupts和Windows IT Pro Magazine: Examining xPerf。Context Switch
值很高時,說明核心在CPU上對進程或線程進行切換。更多詳情,請參見The Case of the 2 Million Context Switches和Mark Russinovich's The Case of the System Process CPU Spikes。Context Switches/sec
值很高表示有大量的線程處於Ready狀態,需要減少線程的數量解決問題。