什么是平均负载
后续实验环境搭建
在腾讯云购买两台机器作为测试机器,机器配置如下:
先从命令uptime说起
代码语言:txt复制# uptime
08:44:17 up 8 min, 1 user, load average: 0.00, 0.03, 0.05 //分别是当前时间 系统运行时间 当前登录数 1/5/15 分钟系统平均负载
平均负载指单位时间内系统,系统处于 可运行状态 和 不可中断状态 的平均进程数,也就是平均活跃
进程数,与CPU没有直接关系
平均负载最理想的情况是等于CPU个数
代码语言:txt复制grep 'model name' /proc/cpuinfo | wc -l
2
Stress 是一款压力测试工具 ,详情可参考http://stresslinux.org/sl/
Sysstat 包含了常用的性能工具
安装过程如下:
代码语言:txt复制git clone git://github.com/sysstat/sysstat
cd sysstat
./configure
make
sudo make install
- mpstat 是常用的多核CPU性能分析工具
- pidstat 是一个常用的进程分析工具
下面使用案例进行分析
- 场景一 CPU 密集型测试
stress --cpu 1 --timeout 600
同时打开三个终端进行观察
代码语言:txt复制# mpstat -P ALL 5 1
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 50.25 0.00 0.30 0.20 0.00 0.00 0.00 0.00 0.00 49.25
Average: 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: 1 0.60 0.00 0.40 0.20 0.00 0.00 0.00 0.00 0.00 98.80
代码语言:txt复制# watch -d uptime
代码语言:txt复制# pidstat -u 5 1
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 0 8551 0.00 0.20 0.00 0.20 - YDService
Average: 0 19466 100.00 0.00 0.00 100.00 - stress
通过观察我们可以发现stress进程会导致CPU 0 的利用率一直上升
1分钟的平均负载也会慢慢增加到1甚至大于1
- 场景二 I/O密集型进程
# stress -i 1 --timeout 600
代码语言:txt复制# watch uptime
10:31:32 up 1 day, 1:56, 3 users, load average: 0.99, 0.59, 0.34
代码语言:txt复制#mpstat -P ALL 5 1
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 0.20 0.00 45.99 4.11 0.00 0.00 0.00 0.00 0.00 49.70
Average: 0 0.00 0.00 91.37 7.83 0.00 0.00 0.00 0.00 0.00 0.80
Average: 1 0.20 0.00 0.60 0.40 0.00 0.00 0.00 0.00 0.00 98.80
- 场景三 大量进程场景
#stress -c 12 --timeout 600
代码语言:txt复制#watch uptime
18:42:28 up 1 day, 10:07, 3 users, load average: 12.34, 5.83, 2.30
代码语言:txt复制#pidstat -u 5 1
Average: UID PID %usr %system %guest %wait %CPU CPU Command
Average: 0 2562 0.00 0.20 0.00 0.00 0.20 - barad_agent
Average: 0 4745 16.77 0.00 0.00 84.63 16.77 - stress
Average: 0 4746 16.57 0.00 0.00 83.83 16.57 - stress
Average: 0 4747 16.57 0.00 0.00 83.23 16.57 - stress
Average: 0 4748 16.57 0.00 0.00 83.63 16.57 - stress
Average: 0 4749 16.77 0.00 0.00 83.63 16.77 - stress
Average: 0 4750 16.57 0.00 0.00 82.24 16.57 - stress
Average: 0 4751 16.57 0.00 0.00 83.23 16.57 - stress
Average: 0 4752 16.57 0.00 0.00 83.63 16.57 - stress
Average: 0 4753 16.57 0.00 0.00 83.23 16.57 - stress
Average: 0 4754 16.77 0.00 0.00 83.03 16.77 - stress
Average: 0 4755 16.77 0.00 0.00 83.43 16.77 - stress
可以看出12个进程争夺2个CPU,导致 I/O wait 高达80% 以上,超过了CPU计算能力