专栏首页公众号-测试驿栈性能测试-cpu负载和cpu利用率

性能测试-cpu负载和cpu利用率

概述

做压力测试的时候,我们经常会关注两个指标,CPU利用率和CPU负载

  Linux中,进程分为三种状态:

  •   阻塞的进程blocked process
  •   可运行的进程runnable process
  •   正在运行的进程running process

  当进程阻塞时,进程会等待I/O设备的数据或者系统调用。

  进程处于可运行状态时,它处在一个运行队列中,与其他可运行进程争夺CPU

CPU使用率

CPU使用率指的是程序在运行期间实时占用的CPU百分比,这是对一个时间段内CPU使用状况的统计。

通过这个指标可以看出在某一个时间段内CPU被占用的情况

CPU负载(load) 

  它指的是正在运行(running)和准备运行(runnable)的进程的总数,也就是是等待处理的任务队列

load-average 

  它指的就是特定时间内运行队列中(在CPU上运行或者等待运行)的平均进程数。

  在linux top命令中指的是是最近1分钟、5分钟和15分钟的系统平均负载

  如果一个进程满足以下条件,则其就会位于运行队列中

  - 它没有在等待I/O操作的结果

  - 它没有主动进入等待状态(也就是没有调用wait)

  - 没有被停止

cpu负载的计算

  CPU数量和CPU内核数都会影响到CPU负载,因为任务最终是要分配到CPU核心去处理的。

  两块CPU要比一块CPU好,双核要比单核好。因此,除去CPU性能上的差异,CPU负载是基于内核数来计算的。

“有多少内核,就有多少load”。如单核负载为1.00,双核负载为2.00.以此类推。

举例说明cpu负载

大家都要坐电梯坐电梯。假设一部电梯能站10个人,那当1-10人坐电梯时,可以认为电梯的load<1; 正好10人时,load=1; 超过10人时,load>1; 如果有15个人要坐电梯,那就是说能有10人直接上过山车,另外5人需要等待。 此时电梯的load=15/10 = 1.5 也就是说,1.5的负载表示系统当前满负荷运转,且还有相当于50%满负荷的请求在等待

对于load average的临界值,业内有两种判断依据

load average <= cpu核数 * 0.7

load average <= cpu核数 - 1

为什么会有高Load,低CPU使用率的情况?

  依然拿电梯的例子来说明。假设一共有20个人来坐电梯。电梯一次运行5分钟。两次运行之间,第一批10人下来,第二批10人来,电梯等人进来,加上关门时间时间也要3分钟。这种情况下电梯的使用率就是50%左右。而过山车的load是2。对应到我们的CPU上,当运行的进程(线程)过多时,频繁的上下文切换耗费了大量的CPU时间,导致真正用在运算的CPU时间片比较少(低CPU使用率),却有很多进程在等待运行(高Load)。 

Cpu 利用率和 load 值高低没有直必然关系

  我们做压测的时候一般认为 CPU 利用率和 Load 值是正比的关系,既Load 值越高,CPU 利用率就越高。

但是事实上有时候 Load 很高,CPU 利用率却比较低(多核更可能出现分配不均的情况)。

  因为 Load 是等待处理的任务队列,当你的应用在等待同步消息返回处理的同时,CPU 还是会将时间切片分配给这些线程。

而真正需要 CPU 的那些线程,却不得不在得不到时间片以后暂时放弃工作被挂起。

CPU利用率高也并不意味着负载就一定大,可能这个任务是一个CPU密集型的。CPU低利用率的情况下也会有高Load Average的情况。当CPU分配时间

片以后,是否使用完全取决于使用者,因此完全可能出现低利用率高Load Average的情况。

  因此在程序设计的时候要考虑如何利用好CPU的这个资源,如何均匀的将压力分摊到各个CPU 上(有时候一个线程在不断循环,导致单个CPU负荷很高)

再举例

  公共电话亭里有一个人在打电话,后面有四个人在等待,每人限定使用电话一分钟。若有人一分钟之内没有打完电话,只能挂掉电话去排队,等待下一

轮。公共电话在就相当于CPU,而正在打电话或等待打电话的人就相当于任务数。

  在电话亭使用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新排队,更会有新增的人在这儿排队。人数的变化就相当于任务数的增减。

为了统计平均负载情况,我们5秒钟统计一次人数,并在第1、5、15分钟的时候对统计情况取平均值,从而形成第1、5、15分钟的平均负载。

  有的人拿起电话就打,打满1分钟,有的人可能前三十秒在找号码,或者犹豫要不要打,后三十秒才真正开始打。如果把电话看作CPU,人数看作任务,

我们可以说前一个人(任务)的CPU利用率高,后一个人(任务)的CPU利用率低。当然, CPU并不会在前三十秒工作,后三十秒歇着,它一直在处于load

状态。

  有的程序涉及到大量的计算,所以CPU利用率就高,而有的程序牵涉到计算的部分很少,CPU利用率自然就低。但无论CPU的利用率是高是低,跟后面有多少任务在排队没有必然关系(cpu利用率和load没有必然关系)。

在Linux系统中,可以通过命令看到系统平均负载load-average的输出

uptime

top

saq -q

runq-sz:运行队列的长度(等待运行的进程数)

plist-sz:进程列表中进程(processes)和线程(threads)的数量

ldavg-1:最后1分钟的系统平均负载(Systemload average)

ldavg-5:过去5分钟的系统平均负载

ldavg-15:过去15分钟的系统平均负载

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 雾计算简史(转载)

    1961 年,人工智能之父麦卡锡在一次会议上提出了「效用计算」这个概念,第一次体现了这种共享资源的思想。当时计算设备的价格非常昂贵,远非普通企业和机构所能承受,...

    飞天小子
  • linux性能监控常用命令

    ps命令能给出当前系统中进程的快照。下面我们列举几个常用的选项 使用 -a 参数。-a 代表 all。同时加上x参数会显示没有控制终端的进程。 ps -ax 通...

    飞天小子
  • you-get视频下载

    you-get是一个基于python3的下载器,没有客户端或者可视化工具,它是在cmd中通过命令行运行的。

    飞天小子
  • 不懂底层的程序员不是好程序员,解密代码在计算机中运行原理

    还记得Windows的CMD吗?只需向这个黑框框输入指令,计算机即可做出相对应的响应。其实计算机的运行本身就是依靠向CPU下达一条一条的指令,并使计算机按指令运...

    IT大咖说
  • CPU的这些硬核知识,作为一个程序员你必须会!

    如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事...

    菜鸟学院
  • 争论|摩尔定律已死?GPU会取代CPU的位置吗?

    如果你觉得好的话,不妨分享到朋友圈。 京举办的NVIDIA GTC China会议中,无论是AI智能运算,还是服务器数据中心、智能城市,甚至还有去年很火热但是...

    IT派
  • 程序员需要了解的硬核知识之CPU

    大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,...

    cxuan
  • linux中top命令

    系统负载(任务队列的平均长度)三个值分别为1分钟、5分钟、15分钟前到现在的平均值

    yaohong
  • 通过编程控制CPU利用率(r4笔记第69天)

    今天想起一个几年前学习过的程序,是在《编程之美》中提到的,是作为当时微软的面试题,写一个程序来控制CPU的利用率保持在50%,进一步延伸,能够写出程序来画出CP...

    jeanron100
  • 硬件: 高性价比的 工作站配置 列表

    [1] CPU性能天梯图 [2] GPU性能天梯图 [3] GeForce 10 series [4] 为个人深度学习机器选择合适的配置 [5]...

    Petrichor_

扫码关注云+社区

领取腾讯云代金券