CPU使用率較低但負載較高
問題描述
Linux 系統沒有業務程序運行,通過 top
觀察,類似如下圖所示,CPU 很空閑,但是 load average 卻非常高,如下圖所示。
處理辦法
load average
是對 CPU 負載的評估,其值越高,說明其任務隊列越長,處於等待執行的任務越多。出現此種情況時,可能是由於僵死進程導致的。可以通過指令 ps -axjf
查看是否存在 D 狀態進程。
D 狀態是指不可中斷的睡眠狀態。該狀態的進程無法被 kill,也無法自行退出。只能通過恢復其依賴的資源或者重啟系統來解決。
kswapd0 進程占用 CPU 較高
操作系統都用分頁機制來管理物理內存,操作系統將磁盤的一部分划出來作為虛擬內存,由於內存的速度要比磁盤快得多,所以操作系統要按照某種換頁機制將不需要的頁面換到磁盤中,將需要的頁面調到內存中,由於內存持續不足,這個換頁動作持續進行,kswapd0是虛擬內存管理中負責換頁的,當服務器內存不足的時候kswapd0會執行換頁操作,這個換頁操作是十分消耗主機CPU資源的。如果通過top發現該進程持續處於非睡眠狀態,且運行時間較長,可以初步判定系統在持續的進行換頁操作,可以將問題轉向內存不足的原因來排查。
問題描述
kswapd0 進程占用了系統大量 CPU 資源。
處理辦法
Linux 系統通過分頁機制管理內存的同時,將磁盤的一部分划出來作為虛擬內存。而 kswapd0 是 Linux 系統虛擬內存管理中負責換頁的進程。當系統內存不足時,kswapd0 會頻繁的進行換頁操作。而由於換頁操作非常消耗 CPU 資源,所以會導致該進程持續占用較高 CPU 資源。
如果通過 top
等監控發現 kswapd0 進程持續處於非睡眠狀態,且運行時間較長並持續占用較高 CPU 資源,則通常是由於系統在持續的進行換頁操作所致。則可以通過 free 、ps 等指令進一步查詢系統及系統內進程的內存占用情況,做進一步排查分析。