平均负载与CPU使用率的区别

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     #此时后台进程不存在

你可能感兴趣的:(平均负载与CPU使用率的区别)