到底该怎么理解平均负载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了到底该怎么理解平均负载相关的知识,希望对你有一定的参考价值。

linux系统基础
每次我们发现系统变慢或者监控发现CPU有异常飚高,都会使用linux系统命令查看,比如top,uptime,等命令,了解当时系统负载情况;
$uptime
10:43:42 up 124 days, 19:22, 16 users, load average: 0.22, 0.13, 0.14
/当前时间 /运行时间 /登录用户数
比如uptime,上面每一个输出的含义,后面三个一次是1分钟、5分钟、15分钟的平均负载
那么问题来了,0.22到底代表的是什么?是单位时间内的CPU使用率?
我们可以使用man uptime 了解平均负载的详细解释;

**平均负载**
单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数;和CPU使用率并没有直接关系

可运行状态的进程,是指正在使用CPU或者正在等待CPU的进程,也就是ps命令看到的处于R状态的进程

不可中断状态的进程是正处于内核态关键流程的进程,比如最常见的是等待硬件设备的I/O响应, 也就是ps命令中看到的D状态的进程;
因此可简单理解为,平均负载其实就是平均活跃进程数,单位时间内的活跃进程数;
例子:当平均负载为2时,意味着什么?
  • 在只有2个CPU的系统上,意味着所有的CPU都刚好被完全占用
  • 在4个CPU的系统行,意味着CPU有50%的空闲
  • 而在只有一个CPU的系统中,则有一半的进程竞争不到CPU

那么平均负载多少比较合理?
平均负载最理想的状态是等于系统CPU个数(逻辑核数)
当平均负载高于CPU数量70%的时候就应该关注;

实际排查中,我们肯定不会只用uptime看平均负载,会结合很多其他性能命令一起排查,比如dstat,pidstat,top,iowait,iostat等;

平均负载于CPU使用率
在学习文章之前我经常混淆这两个概念,load和idle到底该看那个,是不是load高,idle就一定低?
在回到上面的平均负载,单位时间内,处于可运行状态和不可中断状态的进程数,因此,它不仅包括正在使用的CPU的进程还包括等待CPU和等待I/O的进程;
而CPU使用率:单位时间内CPU繁忙情况的统计,跟平均负载不一定完全对应。比如:

  • CPU密集型进程,使用大量CPU会平均负载高,CPU使用率繁忙,此时这两者是一致的
    * I/O密集型进程,等待I/O会导致平均负载高,但CPU使用率不一定高
  • 大量等待CPU的进程会导致平均负载高,此时CPU使用率也会高

所以主要差别是I/O密集型,I/O等待会导致平均负载高,但不一定会导致CPU使用率高,这时候就可以结合其他命令查看,最通用的是先使用pidstat 确认是idle还是IO问题,再用pidstat确认具体进程。

具体演示例子可自行设计。

学习资料地址:https://time.geekbang.org/column/article/69618

以上是关于到底该怎么理解平均负载的主要内容,如果未能解决你的问题,请参考以下文章

02 | 基础篇:到底应该怎么理解“平均负载”?

02 | 基础篇:到底应该怎么理解“平均负载”?

02 基础篇:到底应该怎么理解“平均负载”?

怎么理解“平均负载”? 进行分析等

一文理解 Linux 平均负载,附排查工具

Linux优化如何理解“平均负载”