在使用 Linux 執行個體時,如果遇到執行個體運行卡頓或服務響應時間長度較長等問題,可能是 CPU 使用率或負載過高導致,您可以參考本文內容排查並解決問題。
問題現象
使用 Linux 系統的ECS執行個體時,出現如下現象。
系統運行卡頓、服務響應時間長度較長、應用效能下降等問題。
通過ECS控制台查看執行個體 CPU 使用率監控時,發現CPU使用率或者負載過高(參考值:當前CPU 使用率> 80%,可認為CPU使用率過高,當前負載值>0.5,可以認為負載值過高)。
收到CPU使用率或者負載超過設定閾值的警示資訊。
可能原因
CPU最為常見的兩個觀測指標是CPU使用率和CPU負載情況。關於這兩個指標值過高的可能原因如下。
CPU使用率過高的常見原因:
異常的進程或服務佔用大量 CPU 資源,導致 CPU 使用率過高。
業務程式及業務情境對執行個體的 CPU 效能要求較高,執行個體的 CPU 效能不足以支撐業務開展所需的 CPU 效能要求。
CPU負載過高的常見原因:
單一進程長時間佔用CPU。
磁碟或網路I/O出現瓶頸。
排查步驟
要定位執行個體CPU負載過高的問題,您可以參見下述操作步驟進行問題的排查定位。
使用top命令查看進程的CPU資源使用資訊
top命令是Linux系統中常用的效能分析工具,可以即時顯示系統中各進程的資源佔用情況。
使用介紹
top [-n] [-d] [-n]:重新整理次數。如果不指定重新整理次數,但指定了重新整理時間間隔,重新整理操作不會自動停止,您需要按q鍵退出top程式。
[-d] :重新整理時間間隔。
使用樣本
執行如下命令,查看系統中各進程的資源佔用情況,該命令會每2秒統計一次各進程相關資訊,統計5次後退出top命令。
top -n 5 -d 2系統顯示樣本如下。 關於回顯資訊介紹的更多資訊,請參見系統摘要資訊及進程指標監控欄位說明。
top - 17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05 Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.1 st KiB Mem: 1016656 total, 946628 used, 70028 free, 169536 buffers KiB Swap: 0 total, 0 used, 0 free. 448644 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 41412 3824 2308 S 0.0 0.4 0:19.01 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd在top命令的互動模式下,可以通過按鍵與top命令進行互動。關於互動模式的更多資訊,請參見使用top命令的互動模式。
通過
P鍵,可以對CPU使用率進行倒序排列,方便定位系統中佔用CPU較高的進程。通過
M鍵,您可以對系統記憶體使用量情況進行排序。如果有多核CPU,數字鍵1可以顯示每核CPU的負載狀況。
如需查看每個進程ID對應的程式檔案,您可以運行
ll /proc/<PID>/exe命令,其中<PID>需替換為實際的程式PID。如果已查詢出佔用CPU資源較多的非業務進程資訊,需要終止該進程,您可以在top命令的互動模式下結束對應進程,具體操作,請參見通過PID結束對應進程。
使用vmstat命令查看系統資源使用資訊
vmstat(Virtual Memory Statistics)是用於報告虛擬記憶體統計資訊的命令,可以使用該命令,從系統維度查看作業系統的虛擬記憶體、進程、CPU等指標資訊。
常用參數說明
vmstat命令的使用格式如下。
vmstat [-n] [delay [count]] 參數選項 | 說明 |
-n | 只在開始時顯示一次各欄位名稱。 |
[delay] | 重新整理時間間隔。如果不指定,只顯示一條結果。 |
[count] | 重新整理次數。如果不指定重新整理次數,但指定了重新整理時間間隔,重新整理操作不會自動停止,您需要按 |
使用樣本
執行如下命令,使用vmstat每1秒統計一次各進程的CPU使用方式,連續統計4次。
vmstat -n 1 4返回樣本類似如下。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 2684984 310452 2364304 0 0 5 17 19 35 4 2 94 0 0
0 0 0 2687504 310452 2362268 0 0 0 252 1942 4326 5 2 93 0 0
0 0 0 2687356 310460 2362252 0 0 0 68 1891 4449 3 2 95 0 0
0 0 0 2687252 310460 2362256 0 0 0 0 1906 4616 4 1 95 0 0回顯結果主要欄位說明如下。
r:表示系統中CPU等待處理的線程。一個CPU每次只能處理一個線程,所以該數值越大,通常表示系統運行越慢。
us:使用者模式消耗的CPU時間百分比。該值較高時,說明使用者進程消耗的CPU時間比較多。如果該值長期超過50%,則需要對程式演算法或代碼等進行最佳化。
sy:核心模式消耗的CPU時間百分比。
wa:I/O等待消耗的CPU時間百分比。該值較高時,說明IO等待比較嚴重,這可能是磁碟大量作隨機訪問造成的,也可能是磁碟效能出現了瓶頸。
id:處於空閑狀態的CPU時間百分比。如果該值持續為0,同時sy是us的兩倍,則通常說明系統面臨CPU資源短缺。
處理CPU使用率高的問題
常見CPU佔用較多問題的原因及解決方案如下。
問題現象 | 原因 | 解決方案 |
異常使用者程式或進程長時間佔用大量CPU資源,導致CPU使用率和負載較高。 | 該程式為異常程式或進程,運行時佔用過多CPU資源。 |
|
正常使用者程式或進程長時間佔用大量CPU資源。導致CPU使用率和負載較高。 | 該程式為正常業務程式或進程,運行時佔用過多CPU資源。 | 如果執行個體出現CPU效能瓶頸,您可以結合實際情況選擇相應的處理策略。
|
單個業務程式或進程偶發CPU使用率及負載較高,但期間較短,且發生頻率較低。 | 業務程式需要最佳化,以解決特殊業務情境(加解密,高並發等)觸發的CPU資源佔用過高問題。 | 最佳化業務程式。 |
沒有單個程式或進程佔用大量CPU資源,但整體CPU使用率較高,負載較低。 | 當前執行個體的服務正常運行所需CPU資源效能大於執行個體的CPU效能。 | 如果執行個體出現CPU效能瓶頸,您可以選擇升級執行個體規格。相關操作,請參見修改執行個體規格。 |
常見問題
CPU使用率較低但負載較高
kswapd0進程佔用CPU較高
CPU使用率過高但通過top命令查詢不到異常進程
相關文檔
關於Windows系統CPU使用率高的問題排查及解決方案,請參見Windows執行個體CPU使用率較高問題的排查與處理。
如果需要提前採集CPU指標以便分析異常,您可以使用atop工具。相關內容,請參見使用atop工具監控Linux系統指標。



