問題現象
CPU使用率或負載過高時,常見的現象包括:
商務服務異常
SSH遠端連線響應緩慢、操作卡頓,嚴重時無法建立串連。
網站或應用程式回應時間顯著增加,頁面載入緩慢。
請求頻繁逾時、介面返回失敗,業務處理能力明顯下降。
系統資源異常
執行個體CPU使用率持續高於80%,甚至接近100%。
系統負載(Load Average)持續超過CPU邏輯核心數(如4核機器Load > 4)。
CloudMonitor平台已觸發高負載相關警示(簡訊/郵件通知)。
問題原因
高計算消耗進程 :代碼邏輯問題(如死迴圈)、複雜的計算任務或高並發業務請求導致特定進程佔用大量CPU資源。
I/O效能瓶頸 :磁碟讀寫頻繁或儲存效能不足,導致進程長時間處於等待I/O,從而推高系統平均負載。
核心或系統調用 :頻繁的環境切換、核心任務或驅動程式異常導致系統態CPU使用率升高。
異常或惡意程式 :執行個體被植入挖礦程式、木馬病毒,或存在Rootkit隱藏進程,消耗大量計算資源。
解決方案
首先通過top工具定位導致CPU升高或負載過高的具體指標(使用者態、核心態或I/O等待),然後根據指標類型使用perf、iotop或vmstat等工具深入分析,最後採取相應措施進行最佳化或處理。
步驟一:定位CPU瓶頸指標
通過VNC串連登入ECS執行個體。
訪問ECS控制台-執行個體。在頁面左側頂部,選擇目標資源所在的資源群組和地區。
進入目標執行個體詳情頁,單擊遠端連線,選擇通過VNC遠端連線。輸入帳號和密碼,登入ECS執行個體。
查看系統負載和進程活動。
sudo top定位問題原因。
在
top互動介面按P鍵,按CPU使用率降序排列進程,識別出消耗最高的進程ID(PID)和進程名(COMMAND)。若某個業務進程(如
java、python、php-fpm)CPU使用率持續高於80%,請參考處理業務進程繁忙。若
%Cpu(s)中的I/O等待(wa)持續高於20%,使用者態(us)和核心態(sy)都很低,並且平均負載(Load Average)數值遠超CPU核心數,表明CPU有大量時間在空閑等待磁碟響應,請參考處理磁碟 I/O 瓶頸。當進程等待磁碟I/O完成時,會進入D狀態(不可中斷睡眠),此時進程無法被終止。大量D狀態進程堆積表明磁碟響應緩慢,導致CPU空閑等待,從而推高系統負載。
若
%Cpu(s)中的sy(system)持續高於30%,通常表示核心頻繁執行系統調用或中斷處理,請參考處理核心或系統調用繁忙。若
%Cpu(s)中的si(softirq) 持續高於15%,表明網路流量較高,請參考處理網路中斷繁忙。
步驟二:針對性分析並處理
處理業務進程繁忙
分析並最佳化代碼:
使用效能分析工具定位熱點代碼。
Java應用 :使用
jstack <PID>匯出線程棧,搜尋處於RUNNABLE狀態的線程,觀察調用棧是否存在長時間停留在某個特定方法中。C/C++應用 :使用
perf top -p <PID>查看具體消耗CPU的函數符號。
根據分析結果最佳化演算法、修複死迴圈或減少不必要的計算。
升級資源:若為正常業務增長導致的資源瓶頸,應升級執行個體規格。
處理磁碟 I/O 瓶頸
定位高I/O進程:處理Linux系統磁碟I/O負載過高問題。
檢查是否有D狀態進程堆積:
sudo ps -axjf | grep " D"處理措施:
處理核心或系統調用繁忙
檢查環境切換:運行
vmstat 1命令,觀察cs(context switch)列的數值,若數值持續超過 100,000,說明環境切換過於頻繁,需檢查應用程式是否存在過多的線程建立/銷毀。檢查核心任務:若 kswapd0 進程佔用率高,說明實體記憶體不足,核心正在頻繁進行記憶體回收,建議升級執行個體規格。
實體記憶體不足時,kswapd0頻繁掃描頁面、執行回收和換出操作,這些計算密集型任務會消耗大量CPU資源,導致使用率升高。
處理網路中斷繁忙
分析流量:使用
iftop或iptraf-ng等工具分析網路流量來源和類型。檢查配置:對於高網路負載,可開啟網卡多隊列將中斷分散到多個 CPU 核心。
安全排查:前往Security Center,查看是否存在網路攻擊。
後續建議
配置監控警示:對CPU使用率、負載、I/O等待等指標設定合理的警示閾值,實現早期預警。若需對 Linux 系統指標進行歷史回溯與分析,可使用atop工具監控Linux系統指標。
定期審查與最佳化:定期對系統和應用進行效能審計和代碼審查,發現並解決潛在的效能瓶頸。
容量規劃:根據業務增長趨勢,提前進行容量規劃,確保系統資源能夠應對未來的負載增長。