平均负载
单位时间内,平均活跃进程数(包括可运行状态、不可中断状态).
- 可运行状态:进程正在使用 / 等待cpu
- 不可中断状态:进程正在等待硬件设备的I/O,是系统对进程和硬件设备的一种保护机制
平均负载多少算高?
一般情况下,需要结合load1、load5、load15三个值来预测趋势
- load1 > load15,说明平均负载在升高
- load1 < load15,说明平均负载在降低
结论:平均负载 > cpu core * 70%
cpu core = grep -E “processor” /proc/cpuinfo | wc -l
区别cpu使用率
CPU使用率是单位时间内CPU繁忙情况的统计。而平均负载包括正在使用CPU、等待CPU、等待IO的进程:
- CPU密集型进程,CPU使用率高,平均负载高 ==> 正在使用cpu进程
- I/O密集型进程,平均负载高,CPU使用率低 ==> 正在等待io操作进程
- 大量等待CPU的进程,平均负载高,CPU使用率也会比较高 ==> 正在等待cpu进程
模拟实验
工具 | 备注 |
---|---|
stress | linux压力测试软件 |
sysstat | mpstat、pidstat查看cpu |
场景一:CPU密集型进程
终端1执行如下命令:
stress -c 1 --timeout 600 # 产生1个进程,压测cpu600s
终端2执行uptime查看平均负载
watch -d uptime # watch 监测 -d 表示高亮显示变化的部分
Every 2.0s: uptime
18:55:09 up 129 days, 17:37, 4 users, load average: 1.02, 1.04, 1.53
终端3查看cpu使用率变化:
mpstat -P ALL 2 5 # 每两秒刷新下所有CPU的统计报告,一共刷新显示5次
06:58:30 PM 38 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 # 有一个cpu的%User达到99%上
终端4查看cpu升高的进程:
pidstat -u 2 1
07:00:26 PM 0 4014 100.00 0.00 0.00 100.00 7 stress # stress进程cpu使用率达到100%
结论:平均负载的升高是由CPU使用率高造成的
场景二:io密集型进程
终端1执行如下命令:
stress -c 1 --timeout 600 # 产生1个进程,压测cpu600s
终端2执行uptime查看平均负载
watch -d uptime # watch 监测 -d 表示高亮显示变化的部分
Every 2.0s: uptime
18:55:09 up 129 days, 17:37, 4 users, load average: 1.68, 1.04, 0.78
终端3查看cpu使用率变化:
mpstat -P ALL 2 5 # 每两秒刷新下所有CPU的统计报告,一共刷新显示5次
Average: 2 1.52 0.51 10.15 16.75 0.00 0.00 0.00 0.00 0.00 71.07 # %system和%iowait还是较高
终端4查看cpu升高的进程:
pidstat -u 2 1
Average: 0 21233 0.00 2.97 0.00 2.97 - stress # stress进程的%system还是较高,说明系统调用在发生
结论:平均负载的升高是由进程等待io造成的
场景三:大量进程的情况
终端1执行如下命令:
stress -c 10 --timeout 600 # 产生1个进程,压测cpu600s
终端2执行uptime查看平均负载
wa