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