什么是平均负载,以及影响平均负载的因素

本文详细介绍了Linux系统中的平均负载概念,包括可运行状态和不可中断状态的进程,以及如何通过uptime和mpstat命令查看系统负载和CPU使用率。通过CPU密集型、I/O密集型和大量进程场景的模拟,展示了不同场景下平均负载的变化,并使用pidstat分析了影响负载的具体进程。最后,强调了平均负载与CPU使用率的区别,指出在分析系统性能时应综合考虑这两个指标。
摘要由CSDN通过智能技术生成

什么是平均负载,以及影响平均负载的因素

一.平均负载的相关概念

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

1.2 可运行状态进程:指的是正在使用CPU或者正在等待CPU调度的进程,也就是处于Running或Runnable的进程。

1.3 不可中断状态进程:指的是正在处于内核态关键流程中的进程,比如最常见的就是调用磁盘的IO读取,简而言之就是当一个进程向磁盘读写数据的时候,为了保证数据的一致性,在得到磁盘回复前,是不能被其他进程或中断打短的,这个时候进程就处于不可中断的状态,如果此时被其他的进程打断就容易出现进程和磁盘中的数据不一致的情况。

二.如何查看系统平均负载

2.1 uptime 命令的使用

查看系统的平均负载我们可以使用uptime命令,如下:

[root@VM-4-14-centos ~]# uptime
 17:37:01 up  7:19,  4 users,  load average: 0.00, 0.03, 0.66

17:37:01 代表的是当前时间 up 7:19 代表的是系统运行时间 4 users 代表的是正在登录的用户数

最后三个数字 代表的是过去 1分钟,5分钟,15分钟的平均负载

2.2 系统多少负载合适呢?

从平均负载的概念我们都知道它指的是平均的活跃进程数,那么最完美的就是每一个CPU上刚好运行着一个进程,这样CPU的核数得到了充分的利用。

2.3 当平均负载为4时意味着什么?

以我的云服务器为例,4个核心

在我的系统中当平均负载为4时刚好被占用,如果在8个核心的系统中则意味着有50%的CPU空闲,而在一个只有2个核心的系统中则意味着有一半的进程竞争不到CPU。

2.4 如何查看系统CPU核数

[root@VM-4-14-centos ~]# grep 'model name' /proc/cpuinfo | wc -l
4

2.5 平均负载和CPU使用率

有时候我们很容易把平均负载和CPU使用率搞错,其实是不一样的,平均负载指的是单位时间内处于可运行状态或不可中断的进程数,不仅包含了正在使用CPU的进程,还包含等待CPU和等待I/O的进程。而CPU使用率指的是单位时间内CPU的繁忙情况。其实分三种情况

CPU密集型进程,使用大量的CPU导致平均负载升高的同时也会导致CPU使用率升高,此时两者是一样的

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

大量等待CPU调度的进程也会导致平均负载升高,此时的CPU使用率也会比较高

三. 平均负载案例分析

1.机器配置,以及需要安装的包

机器配置: 4CPU ,16GB内存 , CentOS 7.8

安装 stress和sysstat ,yum install stress,yum install sysstat

stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能的两个命令 mpstat 和 pidstat。
mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所
有CPU的平均指标。
pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等
性能指标

2.场景1:CPU密集型进程

使用stress命令模拟 一个CPU使用率100%的场景

[root@VM-4-14-centos ~]# stress --cpu 1 --timeout 600
stress: info: [7345] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

使用uptime命令查看平均负载情况

[root@VM-4-14-centos ~]# uptime
 18:12:38 up  7:54,  5 users,  load average: 0.63, 0.19, 0.15

可以看到负载有升高但是还在可承受范围内,接着我们使用mpstat查看CPU使用率的情况

[root@VM-4-14-centos ~]# mpstat -P ALL 5
Linux 3.10.0-1160.49.1.el7.x86_64 (VM-4-14-centos)      03/19/2022      _x86_64_                                                                                                             (4 CPU)

06:14:56 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %id                                                                                               le
06:15:01 PM  all   25.34    0.00    0.30    0.00    0.00    0.00    0.00    0.00    0.00   74.                                                                                               36
06:15:01 PM    0    0.20    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00   99.                                                                                               20
06:15:01 PM    1    0.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.                                                                                               00
06:15:01 PM    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.                                                                                               00
06:15:01 PM    3    0.40    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.                                                                                               20

06:15:01 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
06:15:06 PM  all   25.34    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   74.46
06:15:06 PM    0    1.00    0.00    0.20    0.20    0.00    0.00    0.00    0.00    0.00   98.60
06:15:06 PM    1    0.00    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.80
06:15:06 PM    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
06:15:06 PM    3    0.20    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.60

06:15:06 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
06:15:11 PM  all   25.33    0.00    0.35    0.00    0.00    0.00    0.00    0.00    0.00   74.32
06:15:11 PM    0    0.60    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00   98.80
06:15:11 PM    1    0.40    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.20
06:15:11 PM    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
06:15:11 PM    3    0.40    0.00    0.40    0.20    0.00    0.00    0.00    0.00    0.00   99.00

-P ALL 代表的是监控所有CPU,后面数字5代表的是每隔5秒输出一组数据,从结果中可以看到有一个CPU的使用率达到了100%

查看哪个进程导致了CPU使用率为100%,我们可以使用pidstat查询

[root@VM-4-14-centos ~]# pidstat -u 5 1
Linux 3.10.0-1160.49.1.el7.x86_64 (VM-4-14-centos)      03/19/2022      _x86_64_        (4 CPU)

06:17:53 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
06:17:58 PM     0      1810    0.00    0.20    0.00    0.20     3  sgagent
06:17:58 PM     0      1867    0.20    0.20    0.00    0.40     3  barad_agent
06:17:58 PM     0      1969    0.40    0.60    0.00    1.00     0  YDService
06:17:58 PM     0      7346   99.80    0.00    0.00   99.80     2  stress

Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0      1810    0.00    0.20    0.00    0.20     -  sgagent
Average:        0      1867    0.20    0.20    0.00    0.40     -  barad_agent
Average:        0      1969    0.40    0.60    0.00    1.00     -  YDService
Average:        0      7346   99.80    0.00    0.00   99.80     -  stress

从结果中可以看到是stress这个进程

场景2:I/O密集型进程

使用stress命令模拟I/O压力

[root@VM-4-14-centos ~]# stress -i 1 --timeout 600
stress: info: [12222] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd

查看负载情况

[root@VM-4-14-centos ~]# uptime
 18:47:23 up  8:29,  6 users,  load average: 0.69, 0.22, 0.18

查看CPU使用率情况

[root@VM-4-14-centos ~]# mpstat -P ALL 5 1
Linux 3.10.0-1160.49.1.el7.x86_64 (VM-4-14-centos)      03/19/2022      _x86_64_        (4 CPU)

07:05:35 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:05:40 PM  all    0.10    0.00   24.70    0.40    0.00    0.00    0.00    0.00    0.00   74.80
07:05:40 PM    0    0.00    0.00   96.80    1.60    0.00    0.00    0.00    0.00    0.00    1.60
07:05:40 PM    1    0.20    0.00    0.80    0.00    0.00    0.00    0.00    0.00    0.00   99.00
07:05:40 PM    2    0.20    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00   99.20
07:05:40 PM    3    0.20    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.40

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.10    0.00   24.70    0.40    0.00    0.00    0.00    0.00    0.00   74.80
Average:       0    0.00    0.00   96.80    1.60    0.00    0.00    0.00    0.00    0.00    1.60
Average:       1    0.20    0.00    0.80    0.00    0.00    0.00    0.00    0.00    0.00   99.00
Average:       2    0.20    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00   99.20
Average:       3    0.20    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.40


查看是哪个进程,导致iowait高,可以看到是stress进程导致的

 pidstat -u 5 1
Linux 3.10.0-1160.49.1.el7.x86_64 (VM-4-14-centos)      03/19/2022      _x86_64_        (4 CPU)

07:07:39 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07:07:44 PM     0      1326    0.00    0.20    0.00    0.20     2  tat_agent
07:07:44 PM     0      1866    0.20    0.00    0.00    0.20     2  barad_agent
07:07:44 PM     0      1867    0.20    0.20    0.00    0.40     3  barad_agent
07:07:44 PM     0      1969    0.40    0.60    0.00    1.00     2  YDService
07:07:44 PM     0     14986    0.00   97.41    0.00   97.41     0  stress
07:07:44 PM     0     15292    0.00    0.40    0.00    0.40     1  kworker/u8:2
07:07:44 PM     0     15450    0.00    0.20    0.00    0.20     3  pidstat

Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0      1326    0.00    0.20    0.00    0.20     -  tat_agent
Average:        0      1866    0.20    0.00    0.00    0.20     -  barad_agent
Average:        0      1867    0.20    0.20    0.00    0.40     -  barad_agent
Average:        0      1969    0.40    0.60    0.00    1.00     -  YDService
Average:        0     14986    0.00   97.41    0.00   97.41     -  stress
Average:        0     15292    0.00    0.40    0.00    0.40     -  kworker/u8:2
Average:        0     15450    0.00    0.20    0.00    0.20     -  pidstat

场景三: 大量进程的场景

当系统中运行进程超出CPU运行能力时,就会出现等待CPU的进程

使用stress模拟八个进程

stress -c 8 --timeout 600

使用pidstat看下进程的情况

[root@VM-4-14-centos ~]# pidstat -u 5 1
Linux 3.10.0-1160.49.1.el7.x86_64 (VM-4-14-centos)      03/19/2022      _x86_64_        (4 CPU)

07:17:26 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07:17:31 PM     0      1326    0.00    0.20    0.00    0.20     2  tat_agent
07:17:31 PM     0      1867    0.20    0.00    0.00    0.20     3  barad_agent
07:17:31 PM     0      1939    0.20    0.00    0.00    0.20     1  YDLive
07:17:31 PM     0      1969    0.00    0.20    0.00    0.20     2  YDService
07:17:31 PM     0     16059   24.15    0.00    0.00   24.15     3  stress
07:17:31 PM     0     16060   24.35    0.00    0.00   24.35     1  stress
07:17:31 PM     0     16061   20.76    0.00    0.00   20.76     0  stress
07:17:31 PM     0     16062   22.55    0.00    0.00   22.55     2  stress
07:17:31 PM     0     16063   23.55    0.00    0.00   23.55     0  stress
07:17:31 PM     0     16064   23.35    0.00    0.00   23.35     0  stress
07:17:31 PM     0     16065   19.56    0.00    0.00   19.56     1  stress
07:17:31 PM     0     16066   23.55    0.00    0.00   23.55     0  stress
07:17:31 PM     0     16067   26.75    0.00    0.00   26.75     3  stress
07:17:31 PM     0     16068   23.95    0.00    0.00   23.95     1  stress
07:17:31 PM     0     16069   27.35    0.00    0.00   27.35     3  stress
07:17:31 PM     0     16070   23.55    0.00    0.00   23.55     1  stress
07:17:31 PM     0     16071   21.76    0.00    0.00   21.76     1  stress
07:17:31 PM     0     16072   43.31    0.00    0.00   43.31     1  stress
07:17:31 PM     0     16073   25.95    0.00    0.00   25.95     2  stress
07:17:31 PM     0     16074   24.55    0.00    0.00   24.55     1  stress
07:17:31 PM     0     16844    0.00    0.20    0.00    0.20     1  pidstat

Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0      1326    0.00    0.20    0.00    0.20     -  tat_agent
Average:        0      1867    0.20    0.00    0.00    0.20     -  barad_agent
Average:        0      1939    0.20    0.00    0.00    0.20     -  YDLive
Average:        0      1969    0.00    0.20    0.00    0.20     -  YDService
Average:        0     16059   24.15    0.00    0.00   24.15     -  stress
Average:        0     16060   24.35    0.00    0.00   24.35     -  stress
Average:        0     16061   20.76    0.00    0.00   20.76     -  stress
Average:        0     16062   22.55    0.00    0.00   22.55     -  stress
Average:        0     16063   23.55    0.00    0.00   23.55     -  stress
Average:        0     16064   23.35    0.00    0.00   23.35     -  stress
Average:        0     16065   19.56    0.00    0.00   19.56     -  stress
Average:        0     16066   23.55    0.00    0.00   23.55     -  stress
Average:        0     16067   26.75    0.00    0.00   26.75     -  stress
Average:        0     16068   23.95    0.00    0.00   23.95     -  stress
Average:        0     16069   27.35    0.00    0.00   27.35     -  stress
Average:        0     16070   23.55    0.00    0.00   23.55     -  stress
Average:        0     16071   21.76    0.00    0.00   21.76     -  stress
Average:        0     16072   43.31    0.00    0.00   43.31     -  stress
Average:        0     16073   25.95    0.00    0.00   25.95     -  stress
Average:        0     16074   24.55    0.00    0.00   24.55     -  stress
Average:        0     16844    0.00    0.20    0.00    0.20     -  pidstat

四.总结

其实正常分析直接可以使用top命令分析CPU使用率,分析IO的话使用iostat,iotop分析I/O读取异常,本文仅作学习记录,部分知识来源于,极客时间《Linux性能优化实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值