2021-06-23
平均负载指单位时间内,系统处于可运行状态或不可中断状态下的平均进程数,即平均活跃进程数。
平均负载的值一般不超过1,负载满时超过CPU个数
运行状态:进程处于正在使用CPU或等待CPU的阶段
不可中断状态:进程处于内核态关键流程中,这些流程不能被中断(如进程正在等待硬件设备I/O的响应时,属于不可中断状态)
不可中断状态是系统进程与硬件设备之间的保护机制,当进程向磁盘读写数据时,在得到磁盘回复前,这个进程不会被其他进程中断或打断,这样才能保证进程数据和磁盘数据一致。
平均负载与CPU使用率区别
平均负载是平均活跃进程数,不仅包括正常使用CPU的进程,还包括等待CPU和等待I/O的进程
CPU使用率是指单位时间内CPU的繁忙情况统计,不包括等待状态和空闲状态
例:
- CPU密集型进程,会使用大量CPU,此时平均负载和CPU使用率都会升高
- I/O密集型进程,等待I/O的过程会使平均负载升高,但CPU使用率不一定很高
- 大量等待CPU的进程调度,会导致平均负载升高,但CPU使用率不一定高
测试:CPU密集型进程
stress --cpu 1 --timeout 600 #开启一个进程对CPU进行压力测试 ,模拟CPU100%的使用率,可加&后台执行
watch -d uptime #查看平均负载的变化情况
mpstat -P ALL 5 20 #查看CPU使用率的变化情况
对比发现,CPU使用率和平均负载都增高了,但iowait为0,说明平均负载升高是因为CPU
pidstat -u 5 1 #查看哪个进程占用高CPU,最终可见是stress进程占用CPU100%
pkill -9 stress #kill掉高占用CPU的进程即可恢复正常
测试:I/O密集型进程
stress -i 4 --hdd 1 --timeout 600 & #用stress模拟一个高I/O的场景,后台运行
watch -d uptime #查看平均负载的变化情况
mpstat -P ALL 5 20 #查看CPU使用率的变化情况
对比发现,平均负载飙高,超过1,iowait27%左右,CPU使用率7%左右,结论:I/O密集型的进程会导致平均负载升高,CPU使用率不会很高
pidstat -u 5 1 #查看进程情况,找出导致平均负载异常的进程,可见是stress引起的
jobs #此时后台进程还在
pkill -9 stress #杀死该进程
jobs #此时后台进程不存在