CPU使用率終極計算


CPU使用率終極計算

說明

以往對於運維人員查看CPU 用戶態,內核態,IO等待等操作以直接在命令行使用TOP命令查看當前CPU運行狀況,但從未關心過該值是如何通過計算展示出來。以下是對CPU使用率計算說明。

引入

node_cpu: CPU從啟動到當前時間的累積運行時間

假定服務器從啟動到當前時刻已運行了半個小時

CPU被用戶態使用時間為8分鍾

CPU被內核態使用時間為1.5分鍾

CPU被IO等待時間為0.5分鍾

CPU在使用Idle(空閑狀態)的時間為20分鍾

CPU在被其他幾個狀態使用的時間是0

計算公式:CPU的使用率=(所有非空閑狀態的CPU使用時間總和) / (所有狀態CPU時間的總和)

計算:

TOP命令行第二行,除Idle空閑外的所有總和 / 運行30分鍾

(user(8min) + sys(1.5min) + iowa(0.5min) + 0 + 0 + 0 + 0) / (30min)

= 10分鍾 / 30分鍾

= 30%

結論:

在30分鍾內CPU的平均使用率就是30%,但是還有比上面更為簡單的計算方式

Idle(20mins) / (30mins) ==> 70

100% - 70% = 30%

應用場景

在prometheus中node_cpu為CPU從啟動到當前時間的累積運行時間,當在prometheus中想查詢cpu使用率,將代入引用中計算方式進行相關運算。

這里的node_cpu為counter類型,持續增長。

# 獲取空閑CPU運行總時間
node_cpu{mode='idle'}		

# 獲取1分鍾內空閑CPU的增量值
increase(node_cpu{mode='idle'}[1m])

# 如CPU是多核,需要將CPU核數相加
sum(increase(node_cpu{mode='idle'}[1m]))

# 監控取值會存在多主機,所以需要根據instance做分組
sum(increase(node_cpu{mode='idle'}[1m])) by(instance)

# 套取公式計算:
1 - (空閑CPU / 總cpu) = cpu使用率
1 - (sum(increase(node_cpu{mode='idle'}[1m])) by(instance) / sum(increase(node_cpu)[1m]) by(instance)) = CPU的使用率

# 例:(用戶態單獨一個cpu在1分鍾內cpu的使用率)
sum(increase(node_cpu{mode='user'}[1m])) by (instance) / sum(increase(node_cpu[1m])) by (instance)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM