Windows實例中CPU使用率較高問題的排查及解決方法
概述
本文主要介紹Windows實例中CPU使用率較高問題的排查及解決方法。
詳細(xì)信息
- 如果您對實例或數(shù)據(jù)有修改、變更等風(fēng)險操作,務(wù)必注意實例的容災(zāi)、容錯能力,確保數(shù)據(jù)安全。
- 如果您對實例(包括但不限于ECS、RDS)等進(jìn)行配置與數(shù)據(jù)修改,建議提前創(chuàng)建快照或開啟RDS日志備份等功能。
- 如果您在阿里云平臺授權(quán)或者提交過登錄賬號、密碼等安全信息,建議您及時修改。
本文主要通過如下步驟進(jìn)行介紹。
- 定位問題。找到影響CPU使用率過高的具體進(jìn)程。
-
分析處理。排查影響CPU使用率過高的進(jìn)程是否正常,并分類進(jìn)行處理。
- 對于正常進(jìn)程:您需要對程序進(jìn)行優(yōu)化或者升級服務(wù)器配置。
- 對于異常進(jìn)程:您可以手動對進(jìn)程進(jìn)行查殺,也可以使用第三方安全工具去查殺。
- 操作示例。介紹具體排查及解決方法的流程。
- 更多信息。介紹排查工具的使用。
定位問題
微軟有多個工具可以定位CPU使用率過高的問題,例如任務(wù)管理器、資源監(jiān)視器(Resource Monitor)、性能監(jiān)視器(Performance Monitor)、Process Explorer、Xperf(Windows server 2008 以后)、KernRate(Windows server 2003),抓取系統(tǒng)Full Memory Dump進(jìn)行檢查。在流量大的情況下,您還可以使用Wireshark抓取一段時間的網(wǎng)絡(luò)包,分析流量使用情況。
提示:Windows Server 2008以上系統(tǒng),通常使用系統(tǒng)自帶的資源監(jiān)視器監(jiān)控CPU。
- 在桌面底部單擊 開始 菜單,選擇 運行。
-
打開運行框后,在框中輸入perfmon -res,并單擊 確定。
-
在資源監(jiān)視器頁面中,查看各進(jìn)程是否有CPU使用率過高的現(xiàn)象。
- 針對占用資源較高的進(jìn)程,查看對應(yīng)的進(jìn)程ID和進(jìn)程的程序名。
- 定位進(jìn)程ID后,結(jié)合任務(wù)管理器判斷程序是否異常并定位程序的具體位置。
分析處理
CPU使用率過高的分析處理
您需要判斷影響CPU使用率過高的進(jìn)程,屬于正常進(jìn)程還是異常進(jìn)程,并分類進(jìn)行處理。
正常使用率過高的分析處理
正常情況下,當(dāng)客戶頻繁訪問業(yè)務(wù),或由于Windows自身服務(wù)(更新服務(wù)等)都可能會占用較高網(wǎng)絡(luò)流量和CPU 。針對正常進(jìn)程導(dǎo)致的CPU使用率過高的情況,請按照如下順序逐一進(jìn)行排查。
提示:Windows Server 2008或Windows Server 2012實例建議內(nèi)存配置在2G或者2G以上。
- 檢查后臺是否有執(zhí)行Windows Update的行為。
- 建議在服務(wù)器上安裝殺毒軟件,進(jìn)行殺毒。如有安裝殺毒軟件,請檢查CPU飆高時,殺毒軟件是否在后臺執(zhí)行掃描操作。如果可能,請升級殺毒軟件到最新版本,或者刪除殺毒軟件。
- 檢查該ECS內(nèi)應(yīng)用程序是否有大量的磁盤訪問、網(wǎng)絡(luò)訪問行為或高計算需求。通過嘗試增配實例規(guī)格的方式,使用更多核數(shù)或內(nèi)存的規(guī)格來解決資源瓶頸問題,如升級配置。
-
若自身服務(wù)器配置較高,再去升級配置已經(jīng)沒有太大意義。架構(gòu)方面也并非是服務(wù)器配置越高就越好。此時,您需要嘗試進(jìn)行應(yīng)用分離,同時對相關(guān)程序進(jìn)行優(yōu)化。示例說明如下。
問題描述:當(dāng)一個服務(wù)器上面同時部署了MySQL、PHP、Web等多種應(yīng)用,即使配置比較高,也很容易出現(xiàn)資源負(fù)載異常。
解決方法:嘗試應(yīng)用分離,通過不同的服務(wù)器去承載不同的應(yīng)用。比如數(shù)據(jù)庫完全通過RDS來承載,減輕服務(wù)器本身的資源消耗和服務(wù)器內(nèi)部大量的調(diào)用。而程序優(yōu)化方面,您可以根據(jù)自身的配置狀況進(jìn)行調(diào)整,比如調(diào)整連接數(shù)和緩存配置,以及Web和數(shù)據(jù)庫調(diào)用時的各項參數(shù)等。
異常使用率過高的分析處理
對于CPU異常使用率過高的情況,可能是被惡意病毒、木馬入侵導(dǎo)致的。有時三方惡意程序可能會利用操作系統(tǒng)的svchost.exe或者Tcpsvcs.exe來偽裝,引起高CPU的占用。您需要手動對異常進(jìn)程進(jìn)行查殺。
提示:若您無法判斷進(jìn)程是否為病毒或木馬,建議將進(jìn)程名稱在網(wǎng)上進(jìn)行搜索后確認(rèn)。另外,建議您進(jìn)行進(jìn)程刪除操作前,提前創(chuàng)建快照完成備份。
- 使用商業(yè)版殺毒軟件,或使用微軟免費安全工具M(jìn)icrosoft Safety Scanner,在安全模式下進(jìn)行掃描殺毒,工具鏈接如下所示。
- 運行Windows Update來安裝最新的微軟安全補(bǔ)丁。
- 使用MSconfig禁用所有非微軟自帶服務(wù)驅(qū)動,檢查問題是否再次發(fā)生。
- 若服務(wù)器或站點遭受DDoS攻擊或CC攻擊等,短期內(nèi)產(chǎn)生大量的訪問需求。您可以登錄云安全中心,查看云盾中的防護(hù)DDoS攻擊是否調(diào)整好閾值,并核實是否開啟CC防護(hù)。如果攻擊沒有觸發(fā)到閾值,云盾沒有清洗,可以聯(lián)系售后協(xié)助開起清洗。
操作示例
CPU使用率較高的可能原因如下。
- 病毒木馬入侵。
- 第三方殺毒軟件運行。
- 應(yīng)用程序異常、驅(qū)動異常、高I/O使用率或高中斷處理的應(yīng)用程序。
提示:在使用Windows Server 2012的1核1GB規(guī)格的實例時,Windows Update服務(wù)會自動更新,實例的CPU使用率也會突然升高,這是正?,F(xiàn)象。
解決方案
提示:本文大量引用Microsoft的官方文檔和工具鏈接,版權(quán)和所屬權(quán)歸Microsoft所有,并請充分考慮Microsoft Windows產(chǎn)品迭代或者文檔未及時更新可能帶來的問題。
- CPU使用率較高時,檢查后臺是否正在執(zhí)行Windows Update的進(jìn)程。
- 檢查殺毒軟件在后臺是否正在執(zhí)行掃描操作。可以升級殺毒軟件到最新版本,或者刪除殺毒軟件。
- 單擊 運行,然后輸入 MSCONFIG,禁用所有非Microsoft自帶服務(wù)驅(qū)動,然后檢查問題是否再次發(fā)生。相關(guān)參考文檔如下。
- 使用商業(yè)版殺毒軟件或Microsoft安全掃描程序在安全模式下掃描殺毒。關(guān)于Microsoft安全掃描程序的參考文檔如下。
- 運行Windows Update安裝最新Microsoft安全補(bǔ)丁。
- 當(dāng)ECS實例有大量的磁盤訪問、網(wǎng)絡(luò)訪問和高計算需求時,CPU使用率較高是正?,F(xiàn)象,可以通過升級實例規(guī)格的方式以應(yīng)對資源不足問題。
- 更多解決方法可參考如下Microsoft文檔。
更多信息
以下是關(guān)于Windows實例排查工具推薦的相關(guān)內(nèi)容。
任務(wù)管理器
-
直觀檢查應(yīng)用程序列表,定位占用CPU較高的應(yīng)用程序,如下是任務(wù)管理器頁面。
-
在性能頁面檢查CPU使用率時,右鍵單擊CPU使用率圖示,單擊 將圖形更改為 > 邏輯處理器。如下圖顯示了4個邏輯CPU的使用率。
- 當(dāng)單個進(jìn)程的CPU使用率飆升至接近100%時,而其它進(jìn)程的CPU使用率變化不大,則可能是網(wǎng)絡(luò)I/O處理造成的。
資源監(jiān)視器
直觀檢查CPU使用率,還可以通過句柄和模塊搜索對應(yīng)的進(jìn)程。
Process Explorer
- Process Explorer是一款Microsoft Sysinternals工具,通過配置正確的Symbols,檢查對應(yīng)應(yīng)用程序的線程調(diào)用的Call Stack,用以定位可能的問題驅(qū)動。下載Process Explorer工具鏈接如下。
-
如下是Process Explorer工具使用頁面。
性能監(jiān)視器
- 性能監(jiān)視器(Performance Monitor)是Microsoft專業(yè)收集各個組件性能計數(shù)器的工具。對于系統(tǒng)CPU資源消耗,有多個Counter來檢查。通過單擊 開始 > 運行 > perfmon,打開性能監(jiān)視器。
-
Performance有如下三個核心參數(shù)。其中\(zhòng)Processor(_Total)\% Processor Time是\Processor(*)\%
User Time與\Processor(*)\% Privileged Time之和。
- \Processor(_Total)\% Processor Time
- \Processor(*)\% User Time
- \Processor(*)\% Privileged Time
-
\Processor(*)\% Privileged
Time是應(yīng)用程序在內(nèi)核中執(zhí)行系統(tǒng)調(diào)用(例如驅(qū)動、IRP,上下文切換等)操作的時間。如果操作系統(tǒng)花費多余30%的時間在Privileged
Time,如下圖所示,則說明實例正在進(jìn)行高I/O吞吐相關(guān)的操作。
- 當(dāng)% Privileged Time很高時,需要進(jìn)一步檢查% DPC Time、% Interrupt Time以及Context Switches/sec的情況。
- 高% DPC Time、% Interrupt Time意味著未知設(shè)備出現(xiàn)大量的操作或者很差的性能問題,請參考如下文檔。
- 高Context Switches/sec意味著有大量的線程處于Ready狀態(tài),需要減少線程的數(shù)量解決問題。
- % DPC Time、% Interrupt Time很高時,需使用Microsoft Xperf工具進(jìn)一步分析,請參考如下文檔使用XPerf工具。
- \Processor(*)\% User Time表示處理器用于執(zhí)行程序代碼的時間消耗,可以確定哪個應(yīng)用程序或函數(shù)調(diào)用消耗了較多的時間。
-
高User Time情況如下圖所示。
如果您有其他問題,可以聯(lián)系北京優(yōu)勝智連阿里云代理商,為您提供一對一專業(yè)全面的技術(shù)服務(wù),同時新老阿里云會員,均可享受我公司代理商價格,歡迎咨詢!