两者之间有没有关系
在弄清楚CPU Load和Utilization有没有关系之前,我们首先要了解清楚两者的概念。
CPU Load
CPU Load的概念其实是当前正在被CPU所执行的线程数或者正在队列中等待被CPU选中而执行的线程数。说白了就是正在被CPU执行的和可以被CPU执行,已经准备好了的线程数。
那么在类Unix系统中,可以可以查看到CPU Load的命令有哪些呢?一般可以用如下3个命令:
uptime
lscpu
top
以top命令执行结果如下:
如果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使用率很高,CPU Load也很高。
- CPU使用率很低,CPU Load也很高。
第一种情况,可能不存在blocked线程,但是可能系统并发量就是很高,CPU即使很繁忙,排队现象也很严重,这个时候就需要考虑系统application调优或者加大CPU相关配置。
第二种情况,可能存在类似blocked线程,CPU资源被占用,但是CPU没有做事,在等待比如I/O返回。这个时候,可以考虑是不是可以用异步I/O去替代同步I/O,来减轻对资源占用情况。