雲伺服器 ECS Linux 系統 CPU 佔用率較高問題排查思路
如果雲伺服器 ECS Linux 系統的 CPU 持續跑高,則會對系統穩定性和業務執行造成影響。本文對 CPU 佔用率較高問題的排查分析做簡要說明。
可以通過 vmstat 從系統維度檢視 CPU 資源的使用情況。
用法說明:
格式:vmstat -n 1
-n 1表示結果一秒重新整理一次。
示例輸出:$ vmstat -n 1procs—————-memory——————-swap———-io——-system————cpu——- r b swpd free buff cache si so bi bo in cs us sy id wa st 00070352169448
回顯說明:
返回結果中的主要資料列說明:
- r: 表示系統中 CPU 等待處理的執行緒。由於 CPU 每次只能處理一個執行緒,所以,該數值越大,通常表示系統執行越慢。
- us:使用者模式消耗的 CPU 時間百分比。該值較高時,說明使用者程序消耗的 CPU 時間比較多,比如,如果該值長期超過 50%,則需要對程式演算法或程式碼等進行優化。
- sy:核心模式消耗的 CPU 時間百分比。
- wa:IO 等待消耗的 CPU 時間百分比。該值較高時,說明 IO 等待比較嚴重,這可能磁碟大量作隨機訪問造成的,也可能是磁碟效能出現了瓶頸。
- id:處於空閒狀態的 CPU 時間百分比。如果該值持續為 0,同時 sy 是 us 的兩倍,則通常說明系統則面臨著 CPU 資源的短缺。
可以通過 top 從程序緯度來檢視其 CPU、記憶體等資源的使用情況。
用法說明:
格式:top
示例輸出:top -17:27:13 up 27 days,3:13,1 user, load average:0.02,0.03,0.05Tasks: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 stKiB Mem:1016656 total
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 2004141238242308 S 0.00.40:19.01 systemd 2 root 200000 S 0.00.00:00.04 kthreadd
回顯說明:
預設介面上第三行會顯示當前 CPU 資源的總體使用情況,下方會顯示各個程序的資源佔用情況。
可以直接在介面輸入大小字母 P,來使監控結果按 CPU 使用率倒序排列,進而定位系統中佔用 CPU 較高的程序。最後,根據系統日誌和程式自身相關日誌,對相應程序做進一步排查分析,以判斷其佔用過高 CPU 的原因。
操作案例
如前面所述,可以通過 top 命令檢視系統的負載問題,並定位耗用較多 CPU 資源的程序。
可以直接在 top 執行介面快速終止相應的異常程序。說明如下:
- 想要終止某個程序,只需按下小寫的 k 鍵。
- 輸入想要終止的程序 PID (top 輸出結果的第一列)。比如,如下圖所示,假如想要終止 PID 為 23 的程序,輸入 23 後按回車。
- 如下圖所示,操作成功後,介面會出現類似 “Send pid 23 signal [15/sigterm]” 的提示資訊讓使用者進行確認。按回車確認即可。
- 問題描述:
Linux 系統沒有業務程式執行,通過 top 觀察,類似如下圖所示,CPU 很空閒,但是 load average 卻非常高: - 處理辦法:
load average 是對 CPU 負載的評估,其值越高,說明其任務佇列越長,處於等待執行的任務越多。
出現此種情況時,可能是由於僵死程序導致的。可以通過指令 ps -axjf 檢視是否存在 D 狀態程序。
D 狀態是指不可中斷的睡眠狀態。該狀態的程序無法被 kill,也無法自行退出。只能通過恢復其依賴的資源或者重啟系統來解決。
作業系統都用分頁機制來管理實體記憶體,作業系統將磁碟的一部分劃出來作為虛擬記憶體,由於記憶體的速度要比磁碟快得多,所以作業系統要按照某種換頁機制將不需要的頁面換到磁碟中,將需要的頁面調到記憶體中,由於記憶體持續不足,這個換頁動作持續進行,kswapd0是虛擬記憶體管理中負責換頁的,當伺服器記憶體不足的時候kswapd0會執行換頁操作,這個換頁操作是十分消耗主機CPU資源的。如果通過top發現該程序持續處於非睡眠狀態,且執行時間較長,可以初步判定系統在持續的進行換頁操作,可以將問題轉向記憶體不足的原因來排查。
- 問題描述:
kswapd0 程序佔用了系統大量 CPU 資源。 - 處理辦法:
Linux 系統通過分頁機制管理記憶體的同時,將磁碟的一部分劃出來作為虛擬記憶體。而 kswapd0 是 Linux 系統虛擬記憶體管理中負責換頁的程序。當系統記憶體不足時,kswapd0 會頻繁的進行換頁操作。而由於換頁操作非常消耗 CPU 資源,所以會導致該程序持續佔用較高 CPU 資源。
如果通過 top 等監控發現 kswapd0 程序持續處於非睡眠狀態,且執行時間較長並持續佔用較高 CPU 資源,則通常是由於系統在持續的進行換頁操作所致。則可以通過 free 、ps 等指令進一步查詢系統及系統內程序的記憶體佔用情況,做進一步排查分析。