zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    bzoj 2733 [HNOI2012]永无乡
    CF550D Regular Bridge
    bzoj 1911 [Apio2010]特别行动队
    CF1137A/1138C Skyscrapers
    CF295C Greg and Friends
    CF1130E Wrong Answer
    bzoj 1029 [JSOI2007]建筑抢修
    iOS 流布局 UICollectionView使用(简单使用)
    Swift 学习笔记 (解决Swift闭包中循环引用的三种方法)
    Swift 学习笔记(面向协议编程)
  • 原文地址:https://www.cnblogs.com/tcy1/p/15757919.html
Copyright © 2011-2022 走看看