CPU使用率分為
- 用戶態CPU使用率:執行應用程序代碼的時間占總CPU時間的百分比
- 系統態CPU使用率:應用執行操作系統調用的時間占總CPU時間的百分比
系統態CPU使用率高意味着共享資源有競爭或者IO設備之間有大量的交互。
目標:理想情況應用達到最高性能和擴展性時,它的系統態CPU使用率為0%,提供應用性能和擴展性一個目標是盡可能降低系統態CPU使用率
對於計算密集型應用
- 監控用戶態和系統態CPU使用率
- 監控每時鍾指令書IPC或每指令時鍾周期CPI(對於計算密集型重要,系統自帶工具無法監控)
停滯:CPU等待內存中的數據,操作系統工具仍然報告CPU繁忙,當指令所用的操作數據不在寄存器或者緩存中的就會發生。
目標:減少停滯或者改善CPU高速緩存使用率,從而減少CPU在等待內存數據時浪費的時鍾周期
觀察CPU使用率工具
vmstat:只能查看整體CPU使用情況
- us: 用戶進程執行時間百分比。 us的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超50%的使用,那么我們就該考慮優化程序算法或者進行加速
- sy: 內核系統進程執行時間百分比。 sy的值高時,說明系統內核消耗的CPU資源多,這並不是良性表現,我們應該檢查原因
- wa: IO等待時間百分比。 wa的值高時,說明IO等待比較嚴重,這可能由於磁盤大量作隨機訪問造成,也有可能磁盤出現瓶頸
- id: 空閑時間百分比
mpstat:處理相關統計信息
mpstat [ -P { cpu | ALL } ] [ -V ] [ interval [ count ] ]
查看所有CPU統計信息,每2秒一次
- CPU:CPU 編號
- %user:在監控的時間間隔內,用戶級進程(運用程序)占用的CPU時間百分比。
- %nice:在監控的時間間隔內,nice值為負的用戶級進程所占用的CPU時間百分比。
- %sys:在監控的時間間隔內,系統及進程(內核)占用的CPU使用率。該時間包括了系統處理軟、硬中斷所花的時間。
- %iowait:在監控的時間間隔內,等待硬盤I/O的時間,CPU的閑置時間百分比。
- %irq:在監控的時間間隔內,CPU服務硬中斷的所占的時間百分比。
- %soft:在監控的時間間隔內,CPU服務軟中斷的所占的時間百分比。
- %idle:在監控的時間間隔內,CPU閑置時間所占用的時間百分比,不包括等待磁盤IO請求的時間。
CPU調度程序運行隊列
作用:監控CPU調度程序運行隊列用於分辨系統是否滿負荷。
運行隊列:那些已經准備好運行,正等待可用CPU的輕量級進程。
如果准備運行的輕量級進程數超過系統所能處理的上限,運行隊列就會很長。當系統運行隊列等於虛機處理器個數的時候,用戶不會明顯感覺到性能下降。(虛擬處理器就是系統硬件線程個數.Runtime.availableProcessors()返回值)。運行隊列長度達到虛擬處理4倍或是更多時,系統響應非常遲緩。
指導原則:如果在很長時間,運行隊列的長度一直超過虛擬處理器個數1倍,需要關注,如果很長一段時間,運行隊列長度達到虛擬處理器個數的3-4倍或更高,需要立即引起注意或采取行動。
解決方式
- 增加CPU,分擔負載或減少處理器負載,從根本上解決。
- 分析系統中運行的應用,改進CPU使用率。解決算法和數據結構效率
線上vmstat 1觀察CPU隊列情況
procs
- r:在運行隊列中等待的進程數
- b:在等待IO的進程數
mpstat查看CPU個數以及CPU使用情況,系統負載略高
CPU相關監控以及介紹告一段落。
參考: