本文主要介紹Windows系統ECS實例中CPU使用率較高問題的排查及解決方案。
問題現象
Windows系統ECS實例中CPU使用率較高,即CPU使用率≥80%。
問題原因
CPU使用率較高可能有以下原因。
ECS實例遭到病毒木馬入侵。
ECS實例中第三方殺毒軟件運行。
ECS實例中應用程序異常、驅動異常、高I/O使用率或高中斷處理的應用程序。
解決方案
步驟一:定位問題
通過微軟工具(任務管理器、資源監視器等)抓取系統Full Memory Dump,來定位CPU使用率過高的問題。在流量大的情況下,您還可以使用Wireshark抓取一段時間的網絡包,分析流量使用情況。
本文以Windows Server 20222系統資源監視器為例,介紹如何定位CPU使用率較高的問題。其他常見工具,請參見常見工具。
通過VNC方式連接ECS實例。
具體信息,請參見使用VNC登錄實例。
在桌面底部單擊開始菜單,選擇運行。
在運行框中輸入
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狀態,需要減少線程的數量解決問題。