系统load average 数值,系统负载详解,影响cpu用户态、内核态的因素


系统的平均负载

如何理解平均负载


单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。

平均负载多少合理


核心数 平均负载 含义
4 2 有50%的cpu是空闲状态,见图一
2 2 CPU刚好被完全占用,见图二
1 2 至少有一半的进程抢不到cpu资源,见图三

就像是有四条马路, 有两辆小车在上面跑,这个时候交通很畅通,不会堵车。

现在有两条马路,上面有两辆汽车,这个时候刚好合适。

现在有两条马路,四量汽车,马路已经跑满了,后面的就堵住了。

该关注哪个值

1、如果1min,5min,15min的数值相差不大,表示系统的负载很“稳定”

2、如果近1min的值小于近15min的值证明系统负载的,平均负载在逐渐降低,但是在前15min的负载过高原因需要知道。

3、如果近15min的值,远小于近1min的值,说明负载在升高,有可能是临时的也有可能会不停的升高。


平均负载案例分析


对CPU的测试


stress
[[email protected]_nginx ~]# yum -y install stress
# 模拟4个cpu核心全部占满的情况 
终端1
[[email protected]_nginx ~]# stress --cpu 4 --timeout 600
终端2
[[email protected]_nginx ~]# watch -d uptime
10:16:06 up 3 min,  2 users,  load average: 3.90, 1.68, 0.64
mpstat # 查看cpu的实时使用情况
[[email protected]_nginx ~]# yum install -y sysstat
[[email protected]_nginx ~]# mpstat -P ALL 5
# 每5s检查一次所有cpu,查看是用户还是系统导致的负载过高。
Linux 3.10.0-957.el7.x86_64 (fpm_nginx)  04/22/2020  _x86_64_ (4 CPU)
10:22:48 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:22:53 AM  all    0.00    0.00    0.05    0.00    0.00    0.00    0.00    0.00    0.00   99.95
10:22:53 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
10:22:53 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
10:22:53 AM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
10:22:53 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
pidstat
[[email protected]_nginx ~]# pidstat -u 5 1
# 每5s输出一组数据,最后一组数据是平均值,查看是哪个程序导致的负载过高
Linux 3.10.0-957.el7.x86_64 (fpm_nginx)  04/22/2020  _x86_64_ (4 CPU)
10:28:25 AM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
10:28:30 AM     0      5819    0.20    0.00    0.00    0.20     2  vmtoolsd
10:28:30 AM     0      6650  100.00    0.20    0.00  100.00     3  stress
10:28:30 AM     0      6651  100.00    0.20    0.00  100.00     2  stress
10:28:30 AM     0      6652   99.60    0.20    0.00   99.80     0  stress
10:28:30 AM     0      6653  100.00    0.00    0.00  100.00     1  stress
10:28:30 AM     0      6656    0.00    0.40    0.00    0.40     0  pidstat
Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0      5819    0.20    0.00    0.00    0.20     -  vmtoolsd
Average:        0      6650  100.00    0.20    0.00  100.00     -  stress
Average:        0      6651  100.00    0.20    0.00  100.00     -  stress
Average:        0      6652   99.60    0.20    0.00   99.80     -  stress
Average:        0      6653  100.00    0.00    0.00  100.00     -  stress
Average:        0      6656    0.00    0.40    0.00    0.40


对I/O的测试


600s之后退出
stress --io 1 --timeout 600
[[email protected]_nginx ~]# mpstat -P ALL 5
Linux 3.10.0-957.el7.x86_64 (fpm_nginx)  04/22/2020  _x86_64_ (4 CPU)
10:42:05 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:42:10 AM  all    0.10    0.00   13.27    0.00    0.00    0.05    0.00    0.00    0.00   86.58
10:42:10 AM    0    0.00    0.00    8.56    0.00    0.00    0.00    0.00    0.00    0.00   91.44
10:42:10 AM    1    0.00    0.00   11.51    0.00    0.00    0.00    0.00    0.00    0.00   88.49
10:42:10 AM    2    0.21    0.00   12.63    0.00    0.00    0.00    0.00    0.00    0.00   87.16
10:42:10 AM    3    0.21    0.00   20.68    0.00    0.00    0.00    0.00    0.00    0.00   79.11
[[email protected]_nginx ~]# pidstat -u 3 4
Linux 3.10.0-957.el7.x86_64 (fpm_nginx)  04/22/2020  _x86_64_ (4 CPU)
10:43:02 AM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
10:43:05 AM     0        13    0.00    0.33    0.00    0.33     1  migration/1
10:43:05 AM     0      6119    0.00    0.33    0.00    0.33     2  tuned
10:43:05 AM     0      6405    0.00    0.33    0.00    0.33     2  sshd
10:43:05 AM     0      6630    0.00    8.28    0.00    8.28     1  kworker/u256:0
10:43:05 AM     0      6673    0.00   37.09    0.00   37.09     2  stress
10:43:05 AM     0      6674    0.00   17.88    0.00   17.88     0  kworker/u256:2
10:43:05 AM     0      6675    0.00    0.33    0.00    0.33     0  kworker/0:1
10:43:05 AM     0      6804    0.00    0.33    0.00    0.33     1  pidstat
注:磁盘的大量io会导致,负载的异常升高,比cpu的核心还高,会导致内核态的占比升高。


大量进程


[[email protected]_nginx ~]# stress -c 4 --timeout 600
# %idle 表示的是内核态
[[email protected]_nginx ~]# mpstat -P ALL 5
Linux 3.10.0-957.el7.x86_64 (fpm_nginx)  04/22/2020  _x86_64_ (4 CPU)
11:02:02 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:02:07 AM  all   99.72    0.00    0.11    0.00    0.00    0.17    0.00    0.00    0.00    0.00
11:02:07 AM    0   99.55    0.00    0.23    0.00    0.00    0.23    0.00    0.00    0.00    0.00
11:02:07 AM    1   99.78    0.00    0.00    0.00    0.00    0.22    0.00    0.00    0.00    0.00
11:02:07 AM    2   99.55    0.00    0.23    0.00    0.00    0.23    0.00    0.00    0.00    0.00
11:02:07 AM    3  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
[[email protected]_nginx ~]# pidstat -u 3 4
Linux 3.10.0-957.el7.x86_64 (fpm_nginx)  04/22/2020  _x86_64_ (4 CPU)
11:02:25 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
11:02:28 AM     0      5819    0.00    0.32    0.00    1.30    0.32     2  vmtoolsd
11:02:28 AM     0      6119    0.00    0.32    0.00    0.00    0.32     2  tuned
11:02:28 AM     0      7950   97.40    0.00    0.00    0.97   97.40     3  stress
11:02:28 AM     0      7951   98.05    0.32    0.00    0.32   98.38     0  stress
11:02:28 AM     0      7952   98.05    0.32    0.00    0.65   98.38     2  stress
11:02:28 AM     0      7953   98.38    0.32    0.00    0.32   98.70     1  stress
11:02:28 AM     0      8013    0.32    0.32    0.00    0.32    0.65     3  pidstat
# 大量进程会导致用户态升高

总结:

  1. 平均负载高有可能是CPU密集型进程导致的
  2. 平均负载高并不一定代表CPU的使用率就一定高,还有可能是I/O繁忙
  3. 当发现负载高时,可以使用mpstat、pidstat等工具,快速定位到,负载高的原因,从而做出处理