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)的进程。 比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。 不可中断状态实际上是系统对进程和硬件设备的一种保护机制。

平均负载的合理数值 ============================================================================== 平均负载的合理数值 平均负载最理想的情况是等于 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 使用率也会比较高。
平均负载高的原因:
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

场景二: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

场景三:大量进程的场景 测试环境为双核 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 只有 0。 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: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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!