CPU性能篇:load average 平均负载;平均负载高场景:CPU密集型进程、I/O密集型进程、大量的进程;排查命令:uptime、top、mpstat、pidstat

倪朋飞 《Linux 性能优化实战》 学习笔记

 

复制代码
平均负载load average是什么?
=====================================================================================
load average 平均负载 (top 或者 uptime 命令)
    过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average)


平均负载load average是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数,但它实际上是活跃进程数的指数衰减平均值。
    可运行状态的进程:指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。
    不可中断状态的进程:正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
        比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。
        不可中断状态实际上是系统对进程和硬件设备的一种保护机制。
平均负载load average是什么?
复制代码
复制代码
平均负载的合理数值
==============================================================================
平均负载的合理数值
    平均负载最理想的情况是等于 CPU 个数。top 命令或者从文件 /proc/cpuinfo 中读取 " grep 'model name' /proc/cpuinfo | wc -l"

三个不同时间间隔的平均值,其实给我们提供了,分析系统负载趋势的数据来源,让我们能更全面、更立体地理解目前的负载状况。
    1.如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
    2.但如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15 分钟内却有很大的负载。
    3.反过来,如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦 1 分钟的平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了。

在实际生产环境中,当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。
    但 70% 这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势。当发现负载有明显升高趋势时,比如说负载翻倍了,你再去做分析和调查。
平均负载的合理数值
复制代码
复制代码
平均负载与 CPU 使用率的区别
=====================================================================================
平均负载与 CPU 使用率的区别:
    平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
    CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。
        1.CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
        2.I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
        3.大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
平均负载与 CPU 使用率的区别
复制代码

平均负载高的原因:
1.CPU密集型进程
2.I/O 密集型进程
3.大量进程

复制代码
场景一:CPU密集型进程
测试环境为双核
stress --cpu 1 --timeout 600        #模拟一个  CPU  使用率 100% 的场景

watch -d uptime                     #查看平均负载;-d 参数表示高亮显示变化的区域
mpstat -P ALL 5                     #mpstat 查看  CPU  使用率的变化情况(-P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据)
pidstat -u 5 1                      #


[root@yefeng ~]# for i in `seq 1 10`;do uptime;sleep 15;done    #可以看到平均负载在增大
 21:06:30 up  5:14,  4 users,  load average: 0.00, 0.01, 0.05   #执行stress命令前的平均负载
 21:06:45 up  5:14,  4 users,  load average: 0.08, 0.03, 0.05
 21:07:00 up  5:15,  4 users,  load average: 0.29, 0.08, 0.07   
 21:07:15 up  5:15,  4 users,  load average: 0.44, 0.12, 0.08
 21:07:30 up  5:15,  4 users,  load average: 0.57, 0.17, 0.09
 21:07:45 up  5:15,  4 users,  load average: 0.66, 0.21, 0.11
 21:08:00 up  5:16,  4 users,  load average: 0.74, 0.25, 0.12
 21:08:15 up  5:16,  4 users,  load average: 0.80, 0.28, 0.14
 21:08:30 up  5:16,  4 users,  load average: 0.84, 0.32, 0.15
 21:08:45 up  5:16,  4 users,  load average: 0.88, 0.35, 0.16   #1 分钟的平均负载会慢慢增加到 1.00

[root@yefeng ~]# mpstat -P ALL 5
Linux 3.10.0-1160.el7.x86_64 (yefeng)   05/28/2022      _x86_64_        (2 CPU)

09:07:14 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:07:19 PM  all   50.05    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   49.95    #
09:07:19 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    #正好有一个 CPU 的使用率为 100%,但它的 iowait 只有 0。(CPU密集型进程场景)
09:07:19 PM    1    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.80    #这说明,平均负载的升高正是由于 CPU 使用率为 100%09:07:19 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:07:24 PM  all   50.05    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   49.95
09:07:24 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:07:24 PM    1    0.00    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.80

09:07:24 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:07:29 PM  all   50.05    0.00    0.30    0.00    0.00    0.00    0.00    0.00    0.00   49.65
09:07:29 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:07:29 PM    1    0.00    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.60

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all   50.05    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   49.87
Average:       0   99.97    0.00    0.03    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:       1    0.07    0.00    0.17    0.00    0.00    0.00    0.00    0.00    0.00   99.77

[root@yefeng ~]# pidstat -u 5
Linux 3.10.0-1160.el7.x86_64 (yefeng)   05/28/2022      _x86_64_        (2 CPU)

09:13:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:13:07 PM     0       418    0.00    0.20    0.00    0.20     1  xfsaild/dm-0
09:13:07 PM     0     26497   99.60    0.00    0.00   99.60     0  stress                           #多次输出的结果显示,stress 进程的 CPU 使用率为 100%09:13:07 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:13:12 PM     0       746    0.20    0.00    0.00    0.20     0  vmtoolsd
09:13:12 PM    42      1866    0.20    0.00    0.00    0.20     0  gnome-shell
09:13:12 PM     0     26497   99.80    0.00    0.00   99.80     0  stress
09:13:12 PM     0     26579    0.00    0.20    0.00    0.20     1  pidstat

09:13:12 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:13:17 PM     0     26497  100.00    0.00    0.00  100.00     0  stress
09:13:17 PM     0     26579    0.00    0.20    0.00    0.20     1  pidstat

09:13:17 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:13:22 PM     0         3    0.00    0.20    0.00    0.20     0  kworker/0:0
09:13:22 PM     0     26497  100.00    0.00    0.00  100.00     0  stress

Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0         3    0.00    0.04    0.00    0.04     -  kworker/0:0
Average:        0       418    0.00    0.04    0.00    0.04     -  xfsaild/dm-0
Average:        0       746    0.04    0.04    0.00    0.08     -  vmtoolsd
Average:        0      1119    0.04    0.00    0.00    0.04     -  tuned
Average:       42      1866    0.04    0.00    0.00    0.04     -  gnome-shell
Average:        0     26497   99.84    0.00    0.00   99.84     -  stress
Average:        0     26579    0.04    0.12    0.00    0.16     -  pidstat
场景一:CPU密集型进程
复制代码
复制代码
场景二:I/O密集型进程
测试环境为双核
stress -i 1 --timeout 600           #模拟  I/O  压力,即不停地执行  sync

watch -d uptime                     #查看平均负载的变化情况
mpstat -P ALL 5 1                   #查看CPU使用率的变化情况
pidstat -u 5 1                      #查看iowait 高的原因


[root@yefeng ~]# for i in `seq 1 10`;do uptime;sleep 15;done
 21:27:28 up  5:35,  4 users,  load average: 0.00, 0.11, 0.26
 21:27:43 up  5:35,  4 users,  load average: 0.30, 0.17, 0.28
 21:27:58 up  5:36,  4 users,  load average: 0.53, 0.23, 0.29
 21:28:13 up  5:36,  4 users,  load average: 0.63, 0.27, 0.31
 21:28:28 up  5:36,  4 users,  load average: 0.71, 0.30, 0.32
 21:28:43 up  5:36,  4 users,  load average: 0.78, 0.34, 0.33
 21:28:58 up  5:37,  4 users,  load average: 0.90, 0.39, 0.34
 21:29:13 up  5:37,  4 users,  load average: 0.92, 0.42, 0.35
 21:29:28 up  5:37,  4 users,  load average: 1.01, 0.46, 0.37
 21:29:43 up  5:37,  4 users,  load average: 1.07, 0.50, 0.39   #1 分钟的平均负载会慢慢增加到 1.00

[root@yefeng ~]# mpstat -P ALL 5
Linux 3.10.0-1160.el7.x86_64 (yefeng)   05/28/2022      _x86_64_        (2 CPU)

09:28:44 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:28:49 PM  all    2.00    0.00   48.05    0.00    0.00    0.00    0.00    0.00    0.00   49.95
09:28:49 PM    0    4.00    0.00   96.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00        #此处现象与教程的实验现场不一致;难道是虚拟机的关系?实验环境为VMware虚拟机
09:28:49 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00        #教程现象:其中一个 CPU 的系统 CPU 使用率升高到了 23.87,而 iowait 高达 67.53%。这说明,平均负载的升高是由于 iowait 的升高。

09:28:49 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:28:54 PM  all    0.74    0.00   39.85    0.00    0.00    0.11    0.00    0.00    0.00   59.30
09:28:54 PM    0    1.05    0.00   40.00    0.00    0.00    0.21    0.00    0.00    0.00   58.74
09:28:54 PM    1    0.64    0.00   39.53    0.00    0.00    0.21    0.00    0.00    0.00   59.62
……………………………………………………

09:29:14 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:29:19 PM  all    1.60    0.00   48.55    0.00    0.00    0.00    0.00    0.00    0.00   49.85
09:29:19 PM    0    3.20    0.00   96.80    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:29:19 PM    1    0.00    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.80

09:29:19 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:29:24 PM  all    1.80    0.00   48.30    0.00    0.00    0.00    0.00    0.00    0.00   49.90
09:29:24 PM    0    3.41    0.00   96.59    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:29:24 PM    1    0.00    0.00    0.00    0.00    0.00    0.20    0.00    0.00    0.00   99.80

09:29:24 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:29:29 PM  all    1.70    0.00   48.45    0.00    0.00    0.00    0.00    0.00    0.00   49.85
09:29:29 PM    0    3.39    0.00   96.61    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:29:29 PM    1    0.20    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.60

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    1.54    0.00   46.58    0.00    0.00    0.03    0.00    0.00    0.00   51.86
Average:       0    2.72    0.00   81.72    0.00    0.00    0.02    0.00    0.00    0.00   15.54
Average:       1    0.33    0.00   11.37    0.00    0.00    0.04    0.00    0.00    0.00   88.26

[root@centos7 ~]#  mpstat -P ALL 5
Linux 3.10.0-957.21.3.el7.x86_64 (centos7)      05/28/2022      _x86_64_        (1 CPU)

09:37:38 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:37:43 PM  all    3.51    0.00   76.03   20.45    0.00    0.00    0.00    0.00    0.00    0.00        #此处现象与教程的实验现场不一致,与VMware虚拟机的现象也不一致;实验环境为阿里云ECS
09:37:43 PM    0    3.51    0.00   76.03   20.45    0.00    0.00    0.00    0.00    0.00    0.00        #教程现象:其中一个 CPU 的系统 CPU 使用率升高到了 23.87,而 iowait 高达 67.53%。这说明,平均负载的升高是由于 iowait 的升高。

09:37:43 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:37:48 PM  all    3.56    0.00   75.89   20.34    0.00    0.21    0.00    0.00    0.00    0.00
09:37:48 PM    0    3.56    0.00   75.89   20.34    0.00    0.21    0.00    0.00    0.00    0.00


Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    3.80    0.00   75.84   20.33    0.00    0.03    0.00    0.00    0.00    0.00
Average:       0    3.80    0.00   75.84   20.33    0.00    0.03    0.00    0.00    0.00    0.00

[root@yefeng ~]# pidstat -u 5
Linux 3.10.0-1160.el7.x86_64 (yefeng)   05/28/2022      _x86_64_        (2 CPU)

09:28:59 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:29:04 PM     0       746    0.00    0.20    0.00    0.20     0  vmtoolsd
09:29:04 PM    42      1866    0.20    0.00    0.00    0.20     1  gnome-shell
09:29:04 PM     0     26642    0.00    8.58    0.00    8.58     0  kworker/u256:1
09:29:04 PM     0     26728    2.99   80.64    0.00   83.63     0  stress                               #导致CPU使用率高的进程为stress
09:29:04 PM     0     26729    0.00    7.58    0.00    7.58     0  kworker/u256:2
09:29:04 PM     0     26753    0.00    0.20    0.00    0.20     1  pidstat

09:29:04 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:29:09 PM     0         3    0.00    0.20    0.00    0.20     0  kworker/0:0
09:29:09 PM     0     26642    0.00   11.60    0.00   11.60     0  kworker/u256:1
09:29:09 PM     0     26728    2.80   71.20    0.00   74.00     0  stress
09:29:09 PM     0     26729    0.00    7.40    0.00    7.40     0  kworker/u256:2
09:29:09 PM     0     26753    0.00    0.20    0.00    0.20     1  pidstat

09:29:24 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:29:29 PM     0       746    0.00    0.20    0.00    0.20     1  vmtoolsd
09:29:29 PM     0      2380    0.20    0.00    0.00    0.20     1  bash
09:29:29 PM     0     26578    0.00    0.20    0.00    0.20     1  kworker/1:0
09:29:29 PM     0     26642    0.00    7.80    0.00    7.80     0  kworker/u256:1
09:29:29 PM     0     26728    3.40   80.40    0.00   83.80     0  stress
09:29:29 PM     0     26729    0.00    8.40    0.00    8.40     0  kworker/u256:2
09:29:29 PM     0     26753    0.00    0.20    0.00    0.20     1  pidstat


Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0         3    0.00    0.06    0.00    0.06     -  kworker/0:0
Average:        0       743    0.00    0.03    0.00    0.03     -  irqbalance
Average:        0       746    0.00    0.06    0.00    0.06     -  vmtoolsd
Average:       42      1866    0.06    0.00    0.00    0.06     -  gnome-shell
Average:        0      2380    0.03    0.00    0.00    0.03     -  bash
Average:        0     26578    0.00    0.03    0.00    0.03     -  kworker/1:0
Average:        0     26642    0.00    8.43    0.00    8.43     -  kworker/u256:1
Average:        0     26728    3.14   79.18    0.00   82.32     -  stress
Average:        0     26729    0.00    8.17    0.00    8.17     -  kworker/u256:2
Average:        0     26753    0.03    0.11    0.00    0.14     -  pidstat
场景二:I/O密集型进程
复制代码
复制代码
场景三:大量进程的场景
测试环境为双核
stress -c 8 --timeout 600           #模拟的是 8 个进程

watch -d uptime                     #查看平均负载的变化情况
mpstat -P ALL 5 1                   #查看CPU使用率的变化情况(大量进程的场景,该命令似乎无效果)
pidstat -u 5 1


[root@yefeng ~]# for i in `seq 1 10`;do uptime;sleep 15;done
 21:53:38 up  6:01,  4 users,  load average: 0.64, 0.18, 0.29
 21:53:53 up  6:02,  4 users,  load average: 2.27, 0.56, 0.41
 21:54:08 up  6:02,  4 users,  load average: 3.54, 0.92, 0.54
 21:54:24 up  6:02,  4 users,  load average: 4.53, 1.27, 0.66
 21:54:39 up  6:02,  4 users,  load average: 5.30, 1.60, 0.77
 21:54:54 up  6:03,  4 users,  load average: 5.98, 1.93, 0.89
 21:55:09 up  6:03,  4 users,  load average: 6.43, 2.23, 1.01
 21:55:24 up  6:03,  4 users,  load average: 6.77, 2.51, 1.12
 21:55:39 up  6:03,  4 users,  load average: 7.05, 2.78, 1.23
 21:55:54 up  6:04,  4 users,  load average: 7.26, 3.04, 1.34       #系统的 CPU 处于严重过载状态,平均负载高达7.26

[root@yefeng ~]# mpstat -P ALL 5
Linux 3.10.0-1160.el7.x86_64 (yefeng)   05/28/2022      _x86_64_        (2 CPU)

09:53:56 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:54:01 PM  all  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:54:01 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:54:01 PM    1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

09:54:01 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:54:06 PM  all  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:54:06 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:54:06 PM    1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

09:54:06 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:54:11 PM  all   99.90    0.00    0.10    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:54:11 PM    0   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:54:11 PM    1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all   99.90    0.00    0.10    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:       0   99.80    0.00    0.18    0.00    0.00    0.02    0.00    0.00    0.00    0.00
Average:       1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00


[root@yefeng ~]# pidstat -u 5
Linux 3.10.0-1160.el7.x86_64 (yefeng)   05/28/2022      _x86_64_        (2 CPU)

09:54:11 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:54:17 PM     0     27032   24.47    0.00    0.00   24.47     0  stress
09:54:17 PM     0     27033   24.47    0.00    0.00   24.47     1  stress
09:54:17 PM     0     27034   24.66    0.00    0.00   24.66     1  stress
09:54:17 PM     0     27035   24.85    0.00    0.00   24.85     1  stress
09:54:17 PM     0     27036   24.47    0.00    0.00   24.47     0  stress
09:54:17 PM     0     27037   24.47    0.00    0.00   24.47     0  stress
09:54:17 PM     0     27038   24.47    0.00    0.00   24.47     1  stress
09:54:17 PM     0     27039   24.47    0.00    0.00   24.47     0  stress
09:54:17 PM     0     27049    0.00    0.19    0.00    0.19     0  pidstat

09:54:17 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:54:22 PM     0         3    0.00    0.20    0.00    0.20     0  kworker/0:0
09:54:22 PM     0       743    0.00    0.20    0.00    0.20     1  irqbalance
09:54:22 PM     0     27032   24.95    0.00    0.00   24.95     0  stress
09:54:22 PM     0     27033   24.95    0.00    0.00   24.95     1  stress
09:54:22 PM     0     27034   24.95    0.00    0.00   24.95     1  stress
09:54:22 PM     0     27035   24.75    0.00    0.00   24.75     1  stress
09:54:22 PM     0     27036   24.75    0.00    0.00   24.75     0  stress
09:54:22 PM     0     27037   24.75    0.00    0.00   24.75     0  stress
09:54:22 PM     0     27038   24.95    0.00    0.00   24.95     1  stress
09:54:22 PM     0     27039   24.95    0.00    0.00   24.95     0  stress

Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0         3    0.00    0.05    0.00    0.05     -  kworker/0:0
Average:        0       743    0.00    0.02    0.00    0.02     -  irqbalance
Average:        0       746    0.00    0.05    0.00    0.05     -  vmtoolsd
Average:        0     27032   24.90    0.00    0.00   24.90     -  stress
Average:        0     27033   24.88    0.00    0.00   24.88     -  stress
Average:        0     27034   24.90    0.00    0.00   24.90     -  stress
Average:        0     27035   24.90    0.00    0.00   24.90     -  stress               #
Average:        0     27036   24.85    0.00    0.00   24.85     -  stress
Average:        0     27037   24.90    0.00    0.00   24.90     -  stress
Average:        0     27038   24.83    0.00    0.00   24.83     -  stress
Average:        0     27039   24.90    0.00    0.00   24.90     -  stress
Average:        0     27049    0.05    0.12    0.00    0.17     -  pidstat

$ pidstat -u 5 1
14:23:25      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
14:23:30        0      3190   25.00    0.00    0.00   74.80   25.00     0  stress       #每个进程等待 CPU 的时间(也就是代码块中的 %wait 列)高达 75%。这些超出 CPU 计算能力的进程,最终导致 CPU 过载。
14:23:30        0      3191   25.00    0.00    0.00   75.20   25.00     0  stress       #案例中有%wait列;VMware虚拟机测试结果,没有%wait列?
14:23:30        0      3192   25.00    0.00    0.00   74.80   25.00     1  stress
14:23:30        0      3193   25.00    0.00    0.00   75.00   25.00     1  stress
14:23:30        0      3194   24.80    0.00    0.00   74.60   24.80     0  stress
14:23:30        0      3195   24.80    0.00    0.00   75.00   24.80     0  stress
14:23:30        0      3196   24.80    0.00    0.00   74.60   24.80     1  stress
14:23:30        0      3197   24.80    0.00    0.00   74.80   24.80     1  stress
14:23:30        0      3200    0.00    0.20    0.00    0.20    0.20     0  pidstat
场景三:大量进程的场景
复制代码

 stress-ng -i 1 --hdd 1 --timeout 600

 

复制代码
三个场景的命令输出对比
[root@yefeng ~]# for i in `seq 1 10`;do uptime;sleep 15;done    #可以看到平均负载在增大
 21:06:30 up  5:14,  4 users,  load average: 0.00, 0.01, 0.05   #执行stress命令前的平均负载
 21:08:45 up  5:16,  4 users,  load average: 0.88, 0.35, 0.16   #1 分钟的平均负载会慢慢增加到 1.00       (CPU密集型进程场景)

 21:29:43 up  5:37,  4 users,  load average: 1.07, 0.50, 0.39   #1 分钟的平均负载会慢慢增加到 1.00       (I/O密集型进程)

 21:55:54 up  6:04,  4 users,  load average: 7.26, 3.04, 1.34   #系统的 CPU 处于严重过载状态,平均负载高达7.26    (大量进程的场景)

-----------------------------------------------------------------------
[root@yefeng ~]# mpstat -P ALL 5
Linux 3.10.0-1160.el7.x86_64 (yefeng)   05/28/2022      _x86_64_        (2 CPU)

09:07:14 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:07:19 PM  all   50.05    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   49.95    #(CPU密集型进程场景)
09:07:19 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    #正好有一个 CPU 的使用率为 100%,但它的 iowait 只有 009:07:19 PM    1    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.80    #这说明,平均负载的升高正是由于 CPU 使用率为 100%09:28:44 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:28:49 PM  all    2.00    0.00   48.05    0.00    0.00    0.00    0.00    0.00    0.00   49.95        #(I/O密集型进程)
09:28:49 PM    0    4.00    0.00   96.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00        #此处现象与教程的实验现场不一致;难道是虚拟机的关系?实验环境为VMware虚拟机
09:28:49 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00        #教程现象:其中一个 CPU 的系统 CPU 使用率升高到了 23.87,而 iowait 高达 67.53%。这说明,平均负载的升高是由于 iowait 的升高。

09:37:38 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle        #(I/O密集型进程)
09:37:43 PM  all    3.51    0.00   76.03   20.45    0.00    0.00    0.00    0.00    0.00    0.00        #此处现象与教程的实验现场不一致,与VMware虚拟机的现象也不一致;实验环境为阿里云ECS
09:37:43 PM    0    3.51    0.00   76.03   20.45    0.00    0.00    0.00    0.00    0.00    0.00        #教程现象:其中一个 CPU 的系统 CPU 使用率升高到了 23.87,而 iowait 高达 67.53%。这说明,平均负载的升高是由于 iowait 的升高。

13:41:28     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle        #(I/O密集型进程)
13:41:33     all    0.21    0.00   12.07   32.67    0.00    0.21    0.00    0.00    0.00   54.84        #教程数据
13:41:33       0    0.43    0.00   23.87   67.53    0.00    0.43    0.00    0.00    0.00    7.74        #其中一个 CPU 的系统 CPU 使用率升高到了 23.87,而 iowait 高达 67.53%13:41:33       1    0.00    0.00    0.81    0.20    0.00    0.00    0.00    0.00    0.00   98.99

09:53:56 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle        #(大量进程的场景)
09:54:01 PM  all  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00        #该场景下,发现所有的CPU都被打满了
09:54:01 PM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:54:01 PM    1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

-----------------------------------------------------------------------
[root@yefeng ~]# pidstat -u 5
Linux 3.10.0-1160.el7.x86_64 (yefeng)   05/28/2022      _x86_64_        (2 CPU)

09:13:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:13:07 PM     0       418    0.00    0.20    0.00    0.20     1  xfsaild/dm-0                     #(CPU密集型进程场景)
09:13:07 PM     0     26497   99.60    0.00    0.00   99.60     0  stress                           #多次输出的结果显示,stress 进程的 CPU 使用率为 100%。(单个进程几乎独占了一个CPU)

09:28:59 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:29:04 PM     0       746    0.00    0.20    0.00    0.20     0  vmtoolsd
09:29:04 PM    42      1866    0.20    0.00    0.00    0.20     1  gnome-shell
09:29:04 PM     0     26642    0.00    8.58    0.00    8.58     0  kworker/u256:1                       #(I/O密集型进程)
09:29:04 PM     0     26728    2.99   80.64    0.00   83.63     0  stress                               #导致CPU使用率高的进程为stress
09:29:04 PM     0     26729    0.00    7.58    0.00    7.58     0  kworker/u256:2
09:29:04 PM     0     26753    0.00    0.20    0.00    0.20     1  pidstat

13:42:08      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
13:42:13        0       104    0.00    3.39    0.00    0.00    3.39     1  kworker/1:1H                 #(I/O密集型进程)
13:42:13        0       109    0.00    0.40    0.00    0.00    0.40     0  kworker/0:1H                 #教程现象
13:42:13        0      2997    2.00   35.53    0.00    3.99   37.52     1  stress                       #导致CPU使用率高的进程为stress;教程的输出结果多一个%wait列;    
13:42:13        0      3057    0.00    0.40    0.00    0.00    0.40     0  pidstat                      #平均负载高而CPU使用率不高,可以推测stress进程进行了大量的IO

09:54:17 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:54:22 PM     0         3    0.00    0.20    0.00    0.20     0  kworker/0:0
09:54:22 PM     0       743    0.00    0.20    0.00    0.20     1  irqbalance
09:54:22 PM     0     27032   24.95    0.00    0.00   24.95     0  stress                               #(大量进程的场景)
09:54:22 PM     0     27033   24.95    0.00    0.00   24.95     1  stress
09:54:22 PM     0     27034   24.95    0.00    0.00   24.95     1  stress
09:54:22 PM     0     27035   24.75    0.00    0.00   24.75     1  stress
09:54:22 PM     0     27036   24.75    0.00    0.00   24.75     0  stress
09:54:22 PM     0     27037   24.75    0.00    0.00   24.75     0  stress
09:54:22 PM     0     27038   24.95    0.00    0.00   24.95     1  stress
09:54:22 PM     0     27039   24.95    0.00    0.00   24.95     0  stress

$ pidstat -u 5 1
14:23:25      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command      #(大量进程的场景);教程现象
14:23:30        0      3190   25.00    0.00    0.00   74.80   25.00     0  stress       #每个进程等待 CPU 的时间(也就是代码块中的 %wait 列)高达 75%。这些超出 CPU 计算能力的进程,最终导致 CPU 过载。
14:23:30        0      3191   25.00    0.00    0.00   75.20   25.00     0  stress       #案例中有%wait列;VMware虚拟机测试结果,没有%wait列?
14:23:30        0      3192   25.00    0.00    0.00   74.80   25.00     1  stress
14:23:30        0      3193   25.00    0.00    0.00   75.00   25.00     1  stress
14:23:30        0      3194   24.80    0.00    0.00   74.60   24.80     0  stress
14:23:30        0      3195   24.80    0.00    0.00   75.00   24.80     0  stress
14:23:30        0      3196   24.80    0.00    0.00   74.60   24.80     1  stress
14:23:30        0      3197   24.80    0.00    0.00   74.80   24.80     1  stress
14:23:30        0      3200    0.00    0.20    0.00    0.20    0.20     0  pidstat
三个场景的命令输出对比
复制代码

 

posted @   雲淡風輕333  阅读(308)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示