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)
原文地址:https://www.cnblogs.com/tcy1/p/15757919.html