Linux 性能分析(二)

2020-02-28 10:00:19 浏览数 (1)

什么是平均负载

后续实验环境搭建

在腾讯云购买两台机器作为测试机器,机器配置如下:

image.pngimage.png

先从命令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
  1. mpstat 是常用的多核CPU性能分析工具
  2. pidstat 是一个常用的进程分析工具

下面使用案例进行分析

  • 场景一 CPU 密集型测试
代码语言:txt复制
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密集型进程
代码语言:txt复制
# 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
  • 场景三 大量进程场景
代码语言:txt复制
#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计算能力

0 人点赞