usr 用戶態CPU時間
nice 低優先級用戶態CPU時間
system 系統態CPU時間
idle 空閒時間
iowait 等待IO的時間
irq 硬中斷的時間
softirq 軟中斷的時間
steal 當系統運行在虛擬機中時,被其他CPU佔用的時間。
gust 通過虛擬化,運行其他操作系統的時間。
gust_nice 以低優先級運行虛擬化的時候。
CPU使用率 = 1- 空閒時間/CPU總時間
用戶態佔用過多的CPU,應着重排查用戶進程的性能問題。
系統態佔用過多的CPU,應着重排查系統調用,內核進程的問題。
IO等待時機過長,應着重排查系統存儲的IO問題。
軟中斷硬中斷,應着重排查內核中的中斷服務程序。
top,perf top -g 進程號 必須加-g才能顯示函數調用信息。看exectue_ex下的函數調用。
碰到CPU佔用率過高,但是top看不到CPU佔用高的進程的情況可能是:
1、進程不斷因爲某種原因(段錯誤等)退出之後,被監視進程不斷重啓。
2、在進程內部通過exec調用的外部命令。這些命令進程只運行很短的時間就退出,一般很難用top來監控。
用工具https://github.com/brendangregg/perf-tools/blob/master/execsnoop可以監視出存在時間很短的進程。
也可以用perf record -g觀察15秒,然後用perf report查看結果,可以定位出佔用CPU使用率高的進程。
碰到CPU使用率過高問題的定位思路:
1、top命令查看CPU使用率,定位使用率高的進程,如果有,直接perf查看進程,定位到函數位置,走讀代碼,發現問題。
2、如果top命令查看CPU使用率高,但查不到使用率高的進程,考慮短時進程問題。用execsnoop工具定位短時進程。用perf record -g 和perf report定位短時進程。