二 平均负载

一  配置信息:

hostname:load-exam-03

ip:10.100.213.28

config:4c8G

二  都在说“平均负载”,何为平均负载

拿个例子:

[root@load-exam-03 ~]# uptime 
 13:56:46 up 197 days,  3:08,  1 user,  load average: 139.97, 135.86, 132.39

是指cpu的使用率吗?eg:上面的139.97是指:cpu使用率是139.97%。答案是否定的。

执行man uptime就可以看到它的解释:

[root@load-exam-03 ~]# man uptime
System load averages is the average number of processes that are either in a runnable or uninterruptable state. A process in a runnable state is either using the CPU or waiting to use
the CPU. A process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are not normal‐
ized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.

即:平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,他和cpu使用率并没有直接关系。

两个名词的解释:

可运行状态:正在使用cpu和正在等待cpu的进程,也就是ps命令看到的处于R状态(Running或者Runnable)的进程。

不可中断状态:正处于内核态关键流程中的进程,这些进程是不可打断的,eg:等待硬件设备的I/O响应,也就是ps aux中看到的D状态(Uninterruptible Sleep也成为Disk Sleep)的进程。

一个很好的例子:进程想磁盘写数据时,在得到磁盘回复前,该进程是不能被打断的,这个时候该进程就处于不可中断状态,如果被打断磁盘和进程中的数据就不一致了。

不可中断状态实际上是系统对进程和硬件的一种保护机制。

eg:平均负载为2:

在有1个cpu的系统的系统中,有一半的进程竞争不到cpu

在有2个cpu的系统的系统中,cpu被刚好完全占用

在有4个cpu的系统的系统中,cpu有50%的空闲

当平均负载高于cpu数量70%的时候,就应该分析排查负载高的问题了。eg:上面我的系统是4C,如果平均负载达到670%时,就的关注了。

三  cpu使用率

单位时间内cpu繁忙情况的统计。

四  平均负载和cpu使用率

理解了平均负载和cpu使用率,你就会发现他两并不完全对应,大体分为以下三类:

1  cpu密集型进程:使用大量cpu会导致平均负载升高,此时两者一致

2  I/O密集型进程,等待I/O也会导致平均负载升高,但cpu使用率不一定升高

3  大量等待CPU的进程调度也会导致平均负载升高,此时两者一致

五  案例分析

三工具:iostat、mpstat、pidstat

yum install stress sysstat -y

介绍:

stress:linux系统压力测试工具

mpstat:实时查看每个cpu的性能指标,以及所有cpu的性能指标

pidstat:进程性能分析工具,查看进程的cpu、内存、I/O,上下文切换等性能指标。

案例一:cpu密集型进程

[root@xpro-load-exam-02 ~]# stress --cpu 1 --timeout 600
stress: info: [1713] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

(模拟一个cpu使用率100%的场景。)

[root@xpro-load-exam-02 ~]# watch -d uptime
Every 2.0s: uptime                                                                                                                                                          Tue Dec  4 14:55:36 2018

 14:55:36 up 197 days,  4:07,  3 users,  load average: 0.85, 0.80, 0.52
 14:58:06 up 197 days,  4:10,  3 users,  load average: 1.05, 0.90, 0.60

(-d:高亮显示变化的区域。会发现1分钟内的平均负载逐渐变成1。查看平均负载情况)

[root@xpro-load-exam-02 ~]# mpstat -P ALL 5
Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02)         12/04/2018      _x86_64_        (4 CPU)

02:58:34 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:58:39 PM  all   21.77    0.00    0.16    0.00    0.00    0.00    0.05    0.00    0.00   78.02
02:58:39 PM    0    0.40    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.20
02:58:39 PM    1    0.20    0.20    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.20
02:58:39 PM    2    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.80
02:58:39 PM    3   99.76    0.00    0.00    0.00    0.00    0.00    0.24    0.00    0.00    0.00

02:58:39 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:58:44 PM  all   22.43    1.45    0.88    0.00    0.00    0.00    0.05    0.00    0.00   75.18
02:58:44 PM    0    0.40    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.20
02:58:44 PM    1    0.20    4.02    1.41    0.00    0.00    0.00    0.00    0.00    0.00   94.37
02:58:44 PM    2    0.20    1.40    1.40    0.00    0.00    0.00    0.20    0.00    0.00   96.79
02:58:44 PM    3  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

02:58:44 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:58:49 PM  all   21.82    0.05    0.26    0.00    0.00    0.00    0.00    0.00    0.00   77.86
02:58:49 PM    0    0.20    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.60
02:58:49 PM    1    0.20    0.20    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.20
02:58:49 PM    2    0.20    0.20    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.20
02:58:49 PM    3   99.76    0.00    0.00    0.00    0.00    0.00    0.24    0.00    0.00    0.00

(可以发现有一个cpu的使用率接近100%,但是它的iowait只有0,这说明平均负载的升高正是由于cpu的使用率为100%。

-P ALL表示监控所有的cpu,5表示每隔5秒后输出一组数据。)

[root@xpro-load-exam-02 ~]# pidstat -u 5 1
Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02)         12/04/2018      _x86_64_        (4 CPU)

03:01:24 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
03:01:29 PM     0      1714   99.80    0.00    0.00   99.80     2  stress
03:01:29 PM     0      3409    0.00    0.20    0.00    0.20     3  pidstat
03:01:29 PM     0      7293    0.00    0.20    0.00    0.20     1  monitor-agent
03:01:29 PM     0     22282    0.60    0.20    0.00    0.80     1  filebeat
03:01:29 PM     0     25454    0.20    0.00    0.00    0.20     1  cetus_agent
03:01:29 PM   995     26372    0.20    0.00    0.00    0.20     1  zabbix_agentd

Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0      1714   99.80    0.00    0.00   99.80     -  stress
Average:        0      3409    0.00    0.20    0.00    0.20     -  pidstat
Average:        0      7293    0.00    0.20    0.00    0.20     -  monitor-agent
Average:        0     22282    0.60    0.20    0.00    0.80     -  filebeat
Average:        0     25454    0.20    0.00    0.00    0.20     -  cetus_agent
Average:      995     26372    0.20    0.00    0.00    0.20     -  zabbix_agentd

(可以看到stress进程的cpu使用率为100%。)

案例二:I/O密集型进程

[root@xpro-load-exam-02 ~]# stress -i 1 --timeout 600
stress: info: [5610] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd

(模拟I/O压力,即不停的执行sync。)

[root@xpro-load-exam-02 ~]# watch -d uptime
Every 2.0s: uptime                                                                                                                                                          Tue Dec  4 15:12:53 2018

 15:12:53 up 197 days,  4:25,  3 users,  load average: 0.74, 0.43, 0.51
 15:13:37 up 197 days,  4:25,  3 users,  load average: 0.88, 0.51, 0.53

(会发现1分钟内的平均负载逐渐变成1。查看平均负载情况)

[root@xpro-load-exam-02 ~]# mpstat -P ALL 5
Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02)         12/04/2018      _x86_64_        (4 CPU)

03:36:59 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:37:04 PM  all    0.31    0.05   22.26    0.05    0.00    0.00    0.05    0.00    0.00   77.27
03:37:04 PM    0    0.40    0.00    0.40    0.00    0.00    0.00    0.20    0.00    0.00   98.99
03:37:04 PM    1    0.00    0.00   97.69    0.00    0.00    0.00    0.23    0.00    0.00    2.08
03:37:04 PM    2    0.40    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.20
03:37:04 PM    3    0.40    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.20

03:37:04 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:37:09 PM  all    0.15    0.05   23.52    0.00    0.00    0.00    0.00    0.00    0.00   76.28
03:37:09 PM    0    0.40    0.00    0.81    0.00    0.00    0.00    0.00    0.00    0.00   98.79
03:37:09 PM    1    0.00    0.00   96.58    0.00    0.00    0.00    0.00    0.00    0.00    3.42
03:37:09 PM    2    0.00    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.60
03:37:09 PM    3    0.20    0.20    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.20

03:37:09 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:37:14 PM  all    0.20    0.05   23.83    0.05    0.00    0.00    0.05    0.00    0.00   75.81
03:37:14 PM    0    0.20    0.00    0.81    0.00    0.00    0.00    0.00    0.00    0.00   98.99
03:37:14 PM    1    0.00    0.00   94.65    0.21    0.00    0.00    0.00    0.00    0.00    5.14
03:37:14 PM    2    0.20    0.20    0.60    0.00    0.00    0.00    0.00    0.00    0.00   98.99
03:37:14 PM    3    0.40    0.20    0.60    0.00    0.00    0.00    0.20    0.00    0.00   98.59

(从图可以看出%sys,内核态占用cpu达到94.65%。)

[root@xpro-load-exam-02 ~]# pidstat -u 5 1
Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02)         12/04/2018      _x86_64_        (4 CPU)

03:36:11 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
03:36:16 PM     0      8913    0.00    0.60    0.00    0.60     2  kworker/u8:2
03:36:16 PM     0     10487    0.00    1.40    0.00    1.40     2  kworker/u8:0
03:36:16 PM     0     11490    0.00   97.01    0.00   97.01     1  stress
03:36:16 PM     0     11491    0.00   97.01    0.00   97.01     2  stress
03:36:16 PM     0     11600    0.00    0.20    0.00    0.20     3  pidstat
03:36:16 PM     0     22282    0.80    0.20    0.00    1.00     2  filebeat
03:36:16 PM   995     26370    0.00    0.20    0.00    0.20     0  zabbix_agentd

Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0      8913    0.00    0.60    0.00    0.60     -  kworker/u8:2
Average:        0     10487    0.00    1.40    0.00    1.40     -  kworker/u8:0
Average:        0     11490    0.00   97.01    0.00   97.01     -  stress
Average:        0     11491    0.00   97.01    0.00   97.01     -  stress
Average:        0     11600    0.00    0.20    0.00    0.20     -  pidstat
Average:        0     22282    0.80    0.20    0.00    1.00     -  filebeat
Average:      995     26370    0.00    0.20    0.00    0.20     -  zabbix_agentd

(可以看出负载过高是由于stree进程导致的。)

案例三:大量进程的场景

[root@xpro-load-exam-02 ~]# stress -c 16 --timeout 600                                                                                                                                              
stress: info: [13110] dispatching hogs: 16 cpu, 0 io, 0 vm, 0 hdd

(系统cpu个数:8个,开启进程数16个,系统cpu处于过载状态。)

[root@xpro-load-exam-02 ~]# watch -d uptime
Every 2.0s: uptime                                                                                                                                                          Tue Dec  4 15:46:09 2018

 15:46:09 up 197 days,  4:58,  3 users,  load average: 18.00, 10.49, 4.85
 15:46:20 up 197 days,  4:58,  3 users,  load average: 18.07, 10.75, 4.99

(负载过高。)

03:46:25 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:46:30 PM  all   99.79    0.10    0.05    0.00    0.00    0.00    0.05    0.00    0.00    0.00
03:46:30 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:30 PM    1   99.78    0.22    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:30 PM    2   99.60    0.20    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:30 PM    3   99.80    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

03:46:30 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:46:35 PM  all   99.69    0.10    0.16    0.00    0.00    0.00    0.05    0.00    0.00    0.00
03:46:35 PM    0   99.79    0.00    0.21    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:35 PM    1   99.40    0.40    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:35 PM    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:35 PM    3   99.79    0.00    0.21    0.00    0.00    0.00    0.00    0.00    0.00    0.00

03:46:35 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:46:40 PM  all   99.79    0.10    0.10    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:40 PM    0   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:40 PM    1   99.36    0.43    0.21    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:40 PM    2   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:40 PM    3  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

03:46:40 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:46:45 PM  all   99.74    0.10    0.10    0.00    0.00    0.00    0.05    0.00    0.00    0.00
03:46:45 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:45 PM    1   99.59    0.21    0.21    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:45 PM    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03:46:45 PM    3  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0        17    0.00    0.20    0.00    0.20     -  rcuos/3
Average:        0     13111   24.16    0.00    0.00   24.16     -  stress
Average:        0     13112   23.96    0.00    0.00   23.96     -  stress
Average:        0     13113   23.96    0.00    0.00   23.96     -  stress
Average:        0     13114   24.16    0.00    0.00   24.16     -  stress
Average:        0     13115   23.96    0.00    0.00   23.96     -  stress
Average:        0     13116   24.36    0.00    0.00   24.36     -  stress
Average:        0     13117   23.96    0.00    0.00   23.96     -  stress
Average:        0     13118   27.52    0.00    0.00   27.52     -  stress
Average:        0     13119   27.13    0.00    0.00   27.13     -  stress
Average:        0     13120   23.96    0.00    0.00   23.96     -  stress
Average:        0     13121   24.75    0.00    0.00   24.75     -  stress
Average:        0     13122   24.75    0.00    0.00   24.75     -  stress
Average:        0     13123   24.55    0.00    0.00   24.55     -  stress
Average:        0     13124   24.36    0.00    0.00   24.36     -  stress
Average:        0     13125   24.36    0.00    0.00   24.36     -  stress
Average:        0     13126   24.75    0.00    0.00   24.75     -  stress
Average:        0     13646    0.00    0.20    0.00    0.20     -  pidstat
Average:        0     20287    0.20    0.00    0.00    0.20     -  inf-agent-guard
Average:        0     22282    0.79    0.00    0.00    0.79     -  filebeat

(stess导致系统负载过高。)

好了,到这有关平均负载的知识就差不多完了。

为了帮助你理解,这里有个比喻,如果不够形象,欢迎指正:

以地铁为例,地铁的乘客容量就是cpu个数,正在使用CPU的进程就是在地铁上的人,等待cpu的进程就是在下一站等地铁来的人,等待I/O的进程就是下一站要上车和下车的人,

虽然现在对cpu没有影响,但未来会影响,所以也要考虑到平均负载上。

补充:部分人可能对上面“案例二”有疑问,因为实验结果和结论似乎互相矛盾了,其实这是因为工具的问题,stree模拟的场景是使用sync()系统调用,它的作用是刷新缓冲区内存

到磁盘中。对于我上面实验的虚机比较新,缓冲区很小很小,无法产生IO压力,我们换个工具stress的加强版stess-ng来模拟这个场景,安装也方便:

案例二:I/O密集型进程:

yum install stress-ng -y

[root@xpro-load-exam-02 ~]# stress-ng -i 1 --hdd 1 --timeout 600
[root@xpro-load-exam-02 ~]# watch -d uptime
Every 2.0s: uptime                                                                                                                                                                             Wed Dec  5 11:03:35 2018

 11:03:35 up 198 days, 15 min,  3 users,  load average: 0.87, 0.71, 0.65
 11:03:43 up 198 days, 15 min,  3 users,  load average: 1.20, 0.79, 0.67
 11:04:15 up 198 days, 16 min,  3 users,  load average: 1.90, 1.00, 0.75
[root@xpro-load-exam-02 ~]# mpstat -P ALL 5
11:04:29 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:04:34 AM  all    0.31    0.00   19.43   19.38    0.00    0.00    0.05    0.00    0.00   60.84
11:04:34 AM    0    0.20    0.00    5.23    9.86    0.00    0.00    0.00    0.00    0.00   84.71
11:04:34 AM    1    0.41    0.00   10.16   51.42    0.00    0.00    0.00    0.00    0.00   38.01
11:04:34 AM    2    0.20    0.20    9.76   15.85    0.00    0.00    0.00    0.00    0.00   73.98
11:04:34 AM    3    0.42    0.00   53.78    0.00    0.00    0.00    0.00    0.00    0.00   45.80

11:04:34 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:04:39 AM  all    0.26    0.05   18.01   19.86    0.00    0.00    0.05    0.00    0.00   61.77
11:04:39 AM    0    0.20    0.00   10.91   46.26    0.00    0.00    0.20    0.00    0.00   42.42
11:04:39 AM    1    0.00    0.00    3.64   17.98    0.00    0.00    0.00    0.00    0.00   78.38
11:04:39 AM    2    0.40    0.00    9.84   14.06    0.00    0.00    0.20    0.00    0.00   75.50
11:04:39 AM    3    0.21    0.00   49.46    0.00    0.00    0.00    0.21    0.00    0.00   50.11

11:04:39 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:04:44 AM  all    0.31    1.37   16.40   20.98    0.00    0.00    0.00    0.00    0.00   60.95
11:04:44 AM    0    0.20    0.00    6.05   32.66    0.00    0.00    0.00    0.00    0.00   61.09
11:04:44 AM    1    0.40    1.81    4.42   42.77    0.00    0.00    0.00    0.00    0.00   50.60
11:04:44 AM    2    0.20    0.60    8.63    7.43    0.00    0.00    0.00    0.00    0.00   83.13
11:04:44 AM    3    0.42    3.59   47.99    0.00    0.00    0.00    0.00    0.00    0.00   47.99
[root@xpro-load-exam-02 ~]# pidstat -u 5 1
Linux 3.10.0-327.el7.x86_64 (xpro-load-exam-02)         12/05/2018      _x86_64_        (4 CPU)

11:05:44 AM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
11:05:49 AM     0      4138    0.20   51.50    0.00   51.70     1  stress-ng-hdd
11:05:49 AM     0      4139    0.00    8.58    0.00    8.58     0  stress-ng-io
11:05:49 AM     0      4140    0.00    3.79    0.00    3.79     2  kworker/2:0
11:05:49 AM     0      4153    0.00    7.39    0.00    7.39     0  kworker/u8:1
11:05:49 AM     0      4239    0.00    0.20    0.00    0.20     3  watch
11:05:49 AM     0      4816    0.00    0.20    0.00    0.20     2  pidstat
11:05:49 AM     0      6308    0.00    2.40    0.00    2.40     0  kworker/0:1
11:05:49 AM     0     22282    0.60    0.40    0.00    1.00     3  filebeat
11:05:49 AM     0     25449    0.00    0.20    0.00    0.20     2  mon_cetus.sh
11:05:49 AM     0     25454    0.20    0.00    0.00    0.20     1  cetus_agent

Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0      4138    0.20   51.50    0.00   51.70     -  stress-ng-hdd
Average:        0      4139    0.00    8.58    0.00    8.58     -  stress-ng-io
Average:        0      4140    0.00    3.79    0.00    3.79     -  kworker/2:0
Average:        0      4153    0.00    7.39    0.00    7.39     -  kworker/u8:1
Average:        0      4239    0.00    0.20    0.00    0.20     -  watch
Average:        0      4816    0.00    0.20    0.00    0.20     -  pidstat
Average:        0      6308    0.00    2.40    0.00    2.40     -  kworker/0:1
Average:        0     22282    0.60    0.40    0.00    1.00     -  filebeat
Average:        0     25449    0.00    0.20    0.00    0.20     -  mon_cetus.sh
Average:        0     25454    0.20    0.00    0.00    0.20     -  cetus_agent

对比上面三张图可以返现,IO一度很高达到51.42%,但此时的cpu使用率却不是很高,只有62%。

原文地址:https://www.cnblogs.com/fengzhihai/p/10063978.html