每当系统变慢时,我们做的第一件事就是执行top或uptime,来了解下负载情况。
如下:
这里每一列输出的含义是什么呢?
19:40:29 //当前时间
up 3 days, 7:32 //系统运行时间
3 user //正在登录用户数
最后三个数呢?依次是 1分钟,5分钟,15分钟的平均负载(load average)
什么是平均负载呢?
简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。
最理想的平均活跃进程数是什么?
就是刚好每个CPU上都刚好运行着一个进程,这样每个CPU都得到了充分的利用。比如平均负载为4时意味着什么呢?
- 在只有4个CPU的系统上,意味着所有的CPU都刚好被完全占用。
- 在8个CPU的系统上,意味着CPU有50%的空闲。
- 而在有2个CPU系统上,意味着有一半的进程竞争不到CPU。
平均负载为多少时合理?
平均负载比CPU个数大的时候,系统就已经出现了过载。
- 如果1分钟,5分钟,15分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
- 如果1分钟的值远小于15分钟的值,就说明系统最近1分钟负载在减少,而过去15分钟内却有很大负载。
- 反之则相反,如果1分钟的值远大于15分钟的值,说明近1分钟负载在增加,这种情况可能是临时性的,也可能还会持续,要持续观察,一旦1分钟的平均负载超过了CPU的数量,意味着系统正在发生过载的问题。
例如:一个单核系统上,平均负载为1.78,0.60,6.56,说明1分钟内,系统有78%的超载,而在15分钟内有556%的超载。
实际生产中,平均负载多高时需要关注呢?
平均负载高于CPU数量70%时,就应该分析排查负载高问题了。(不绝对)
平均负载与CPU使用率
- CPU密集型进程,使用大量CPU会导致平均负载升高,此时两者时一致的。
- I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定很高。
- 大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高。