到底该怎么理解平均负载

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

转载于:https://blog.51cto.com/14137532/2331923

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值