知识点
- 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系;
- 可运行状态的进程是指正在使用CPU和正在等待CPU的进程,即使用PS命令看到的R状态的进程;
不可中断状态的进程是指正在处于内核态关键流程中的进程,并且这些流程是不可打断的,比如正在等待IO响应,即使用PS命令看到的D状态的进程;不可中断状态是系统对进程和硬件的一种保护机制;
最理想的状态下,一个CPU一个进程,即平均负载等于CPU的个数;
例子说明:假如平均负载为2,意味着什么?
如果有2个CPU,则意味着所有CPU刚好都被占用;
如果有4个CPU,则意味着有一半的CPU处于空闲状态;
如果有1个CPU,则意味着有一半的进程处于挂起状态;查看CPU信息:cat /proc/cpuinfo 或者 lscpu;
当平均负载高于CPU数量70%的时候,可以认为已经是负载过高了;
最好的方法是把机器负载实时监控起来,根据负载趋势图观察当前负载是否属于过高;
CPU使用率是单位时间内CPU繁忙情况的统计;
平均负载和CPU使用率对比说明:
CPU密集型进程,使用大量CPU导致负载升高,此时两者一致;
IO密集型进程,等待IO也会导致平均负载升高,但CPU使用率不一定高;
大量等待CPU的进程调度也会导致平均负载升高,此时两者也是一致的;
相关工具
- stress - Linux下的系统压力测试工具,可以模拟CPU、磁盘IO、内存等压力,非常有用;
- mpstat - 多核CPU性能分析工具,查看每个CPU的性能指标及所有CPU的平均指标;
- pidstat - 进程性能分析工具,查看每个进程的CPU、内存、IO及上下文切换等性能指标;
场景模拟
模拟CPU使用率100%
- 使用stress工具
$ stress --cpu 1 --timeout 600
; - 观察平均负载的变化
$ watch -d uptime
; - 查看CPU使用率的变化
$ mpstat -P ALL 5
; - 定位CPU使用率高的进程
$ pidstat -u 5 1
;
- 使用stress工具
模拟高IO压力
- 使用stress工具
$ stress -i 1 --timeout 600
; - 观察平均负载的变化
$ watch -d uptime
; - 查看CPU使用率的变化
$ mpstat -P ALL 5 1
; - 定位CPU使用率高的进程
$ pidstat -u 5 1
;
- 使用stress工具
模拟大量进程
- 使用stress工具
$ stress -c 8 --timeout 600
; - 观察平均负载
$ uptime
; - 查看进程情况
$ mpstat -P ALL 5 1
;
- 使用stress工具
总结
根据平均负载可以快速判断一个系统的整体性能,需要进一步定位是什么原因导致的平均负载高的问题。可能是CPU密集型进程导致的,也可能是IO繁忙导致的,具体是那种可以使用mpstat或者pidstat等工具查看。