两者之间有没有关系

在弄清楚CPU Load和Utilization有没有关系之前,我们首先要了解清楚两者的概念。

CPU Load

CPU Load的概念其实是当前正在被CPU所执行的线程数或者正在队列中等待被CPU选中而执行的线程数。说白了就是正在被CPU执行的和可以被CPU执行,已经准备好了的线程数。

那么在类Unix系统中,可以可以查看到CPU Load的命令有哪些呢?一般可以用如下3个命令:

uptime
lscpu
top


以top命令执行结果如下:

性能测试分析之CPU Load与Utilization_CPU使用率


如果CPU Load的结果如下所示,说明CPU 队列比较长,Load比较大。

load average: 3.25, 1.0, 2.25


以上三个数字分别表示:

  • 最近1分钟load average是3.25
  • 最近5分钟load average是1.0
  • 最近15分钟load average是2.25

高的CPU Load数值往往预示着CPU压力可能过载了,但是这也不一定,它取决于机器安装了多少个CPU Cores. 如果你的机器上只安装了一个CPU核,那么如果load average 超过1,那么就说明CPU处理能力已经过载,或者说当前的CPU配置不能处理当前的处理需求。那么具体应该怎么解析上述结果呢?

比如说最近1分钟load average是3.25,如果当前机器的CPU核数是4,那么说明CPU并没有过载,如果当前机器的CPU核数为2,那么说明CPU压力过载。那么有多少个线程在排队呢?数据等于(Load average - CPU cores #) 数值为 1.25个。

CPU Utilization 

CPU使用率,很多同学对这个概念应该不陌生。如果CPU使用率越高,那么说明CPU越繁忙,如果说CPU 使用率越低,那么说明CPU越空闲。在我们的真实的生产环境中,如果发现CPU使用率很低,未必见得是好事,这就恰好说明CPU未被充分利用,是不是可以降低环境配置,进而减少成本支出呢?所以这是值得我们思考的问题。

CPU使用率数值监控,在类Unix系统中,也可以用top命令实现。

性能测试分析之CPU Load与Utilization_CPU Load_02


两者之间到底有没有关系?

很多人说有关系,又有一些人说没有关系。笔者的看法是偏向于后者,也就是两者之间没有太多直接的关系。因为我们可以理解为至少有如下两种情况存在。

  • CPU使用率很高,CPU Load也很高。
  • CPU使用率很低,CPU Load也很高。

第一种情况,可能不存在blocked线程,但是可能系统并发量就是很高,CPU即使很繁忙,排队现象也很严重,这个时候就需要考虑系统application调优或者加大CPU相关配置。

第二种情况,可能存在类似blocked线程,CPU资源被占用,但是CPU没有做事,在等待比如I/O返回。这个时候,可以考虑是不是可以用异步I/O去替代同步I/O,来减轻对资源占用情况。