CPU性能指标:平均负载

问题

我们经常使用linux的top命令或uptime命令,来查看os的平均负载,类似如下:

$ uptime
 02:27:16 up 11:14,  1 user,  load average: 0.00, 0.01, 0.00

这个load average平均负载,具体是什么意思?

3个数含义

平均负载是指1分钟,5分钟,15分钟时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。实际上就是1分钟,5分钟,15分钟内,平均活跃进程数。

cpu核数

lscpu
Architecture:          aarch64
  CPU op-mode(s):      64-bit
  Byte Order:          Little Endian
CPU(s):                6

这个CPU(s):就是表示这个台电脑的cpu核数。
这样基于,上面两个指标,就可以知道cpu利用率是多少了。

cpu密集型场景

# 使用stress命令制造1进程,进行复杂计算,600秒后停止
stress --cpu 1 --timeout 600
stress: info: [24183] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
# uptime观察实时平均负载
watch -d uptime
Every 2.0s: uptime                                                                                                                                                                    ubuntu: Mon May 29 06:32:38 2023

 06:32:38 up 15:19,  4 users,  load average: 0.55, 0.68, 0.47

# 使用mpstat观察所有CPU运行状态,每5秒报告一次
mpstat -P ALL 5
Linux 5.15.0-71-generic (ubuntu) 	05/29/2023 	_aarch64_	(6 CPU)

06:33:02 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
06:33:07 AM  all   16.68    0.00    0.03    0.07    0.00    0.13    0.00    0.00    0.00   83.08
06:33:07 AM    0    0.00    0.00    0.20    0.20    0.00    0.40    0.00    0.00    0.00   99.20
06:33:07 AM    1    0.00    0.00    0.00    0.00    0.00    0.40    0.00    0.00    0.00   99.60
06:33:07 AM    2    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.80
06:33:07 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
06:33:07 AM    4  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
06:33:07 AM    5    0.00    0.00    0.00    0.20    0.00    0.00    0.00    0.00    0.00   99.80
# 从mpstat报告可以知道4号CPU的存在用户进程达到了100%
# 使用pidstat命令观察进程占用CPU的使用情况,每5秒报告一次
pidstat -u 5
Linux 5.15.0-71-generic (ubuntu) 	05/29/2023 	_aarch64_	(6 CPU)

06:35:16 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
06:35:21 AM     0      2111    0.20    0.00    0.00    0.00    0.20     5  containerd
06:35:21 AM  1000     25471  100.00    0.00    0.00    0.00  100.00     4  stress
06:35:21 AM  1000     25515    0.00    0.20    0.00    0.00    0.20     3  watch
# 从报告中可以知道stress进程,在4号CPU上面使用率达到了100%

io密集型场景

# 使用stress命令制造1个进程不对队磁盘进程IO操作,从而制造IO密集型场景,600秒后停止
stress -i 1 --timeout 600
# 观察实时平均负载
watch -d uptime
# 使用mpstat观察所有CPU运行状态,每5秒报告一次
mpstat -P ALL 5
Linux 5.15.0-71-generic (ubuntu) 	05/29/2023 	_aarch64_	(6 CPU)
06:43:42 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
06:43:47 AM  all    0.03    0.00    1.41   14.45    0.00    0.03    0.00    0.00    0.00   84.07
06:43:47 AM    0    0.00    0.00    0.00    0.00    0.00    0.20    0.00    0.00    0.00   99.80
06:43:47 AM    1    0.00    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   99.60
06:43:47 AM    2    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.80
06:43:47 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
06:43:47 AM    4    0.00    0.00    7.01   78.98    0.00    0.00    0.00    0.00    0.00   14.01
06:43:47 AM    5    0.00    0.00    1.41   11.47    0.00    0.00    0.00    0.00    0.00   87.12
# 从报告中可以知道4号CPU中存在78.98%io等待。
# 使用pidstat命令观察进程占用CPU的使用情况,每5秒报告一次
pidstat -u 5
Linux 5.15.0-71-generic (ubuntu) 	05/29/2023 	_aarch64_	(6 CPU)

06:45:30 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
06:45:35 AM     0       206    0.00    1.20    0.00    0.00    1.20     5  kworker/5:1H-kblockd
06:45:35 AM     0       256    0.00    2.00    0.00    0.00    2.00     4  kworker/4:1H-kblockd
06:45:35 AM     0      2111    0.00    0.20    0.00    0.00    0.20     5  containerd
06:45:35 AM     0      2990    0.00    0.20    0.00    0.00    0.20     5  kworker/5:2-events
06:45:35 AM  1000     26459    0.00    9.58    0.00    3.19    9.58     4  stress
# pidstat报告中可以知道4号cpu上面wait最大为3.19%,是stress进程

cpu争夺场景

# 这里创造24个进程,600秒后停止
stress -c 24 --timeout 600
# 因为这里测试的机器有6个核数,基于此数据,我创造4倍的进程数,来发起一群进程cpu争夺战
# 观察实时平均负载
watch -d uptime
# 使用mpstat观察所有CPU运行状态,每5秒报告一次
mpstat -P ALL 5
Linux 5.15.0-71-generic (ubuntu) 	05/29/2023 	_aarch64_	(6 CPU)

06:53:45 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
06:53:50 AM  all  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
06:53:50 AM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
06:53:50 AM    1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
06:53:50 AM    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
06:53:50 AM    3  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
06:53:50 AM    4  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
06:53:50 AM    5  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
# 这次每个cpu的用户进程使用率都100%
# 使用pidstat命令观察进程占用CPU的使用情况,每5秒报告一次
pidstat -u 5
Linux 5.15.0-71-generic (ubuntu) 	05/29/2023 	_aarch64_	(6 CPU)

06:55:03 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
06:55:08 AM     0        60    0.00    0.20    0.00    0.00    0.20     1  kcompactd0
06:55:08 AM     0       346    0.00    0.20    0.00    0.00    0.20     2  kworker/2:2-events
06:55:08 AM     0      2111    0.00    0.20    0.00    0.00    0.20     5  containerd
06:55:08 AM     0     17092    0.00    0.20    0.00    0.00    0.20     0  irqbalance
06:55:08 AM  1000     27466   24.90    0.00    0.00   74.90   24.90     2  stress
06:55:08 AM  1000     27467   24.90    0.00    0.00   75.10   24.90     2  stress
06:55:08 AM  1000     27468   24.90    0.00    0.00   74.70   24.90     4  stress
06:55:08 AM  1000     27469   24.90    0.00    0.00   74.50   24.90     1  stress
06:55:08 AM  1000     27470   24.90    0.00    0.00   74.50   24.90     1  stress
06:55:08 AM  1000     27471   25.10    0.00    0.00   74.70   25.10     3  stress
06:55:08 AM  1000     27472   24.90    0.00    0.00   74.70   24.90     5  stress
06:55:08 AM  1000     27473   24.70    0.00    0.00   74.90   24.70     0  stress
06:55:08 AM  1000     27474   24.90    0.00    0.00   74.50   24.90     3  stress
06:55:08 AM  1000     27475   24.90    0.00    0.00   74.90   24.90     1  stress
06:55:08 AM  1000     27476   24.90    0.00    0.00   74.50   24.90     0  stress
06:55:08 AM  1000     27477   24.90    0.00    0.00   74.70   24.90     4  stress
06:55:08 AM  1000     27478   24.90    0.00    0.00   74.90   24.90     5  stress
06:55:08 AM  1000     27479   25.10    0.00    0.00   75.30   25.10     4  stress
06:55:08 AM  1000     27480   24.90    0.00    0.00   74.70   24.90     5  stress
06:55:08 AM  1000     27481   24.90    0.00    0.00   74.90   24.90     4  stress
06:55:08 AM  1000     27482   24.90    0.00    0.00   74.50   24.90     2  stress
06:55:08 AM  1000     27483   24.90    0.00    0.00   74.90   24.90     3  stress
06:55:08 AM  1000     27484   24.90    0.00    0.00   74.90   24.90     1  stress
06:55:08 AM  1000     27485   24.90    0.00    0.00   74.70   24.90     3  stress
06:55:08 AM  1000     27486   24.70    0.00    0.00   74.50   24.70     2  stress
06:55:08 AM  1000     27487   24.90    0.00    0.00   74.90   24.90     5  stress
06:55:08 AM  1000     27488   24.90    0.00    0.00   75.10   24.90     0  stress
06:55:08 AM  1000     27489   25.10    0.00    0.00   75.10   25.10     0  stress
# 从pidstat报告中可以知道等待cpu时间的都基本上达到了75%,都是stress进程在那里等

总结

当平均负载高于CPU数量70%的时候,就需要进行高负载问题排查了。

参考:

  • mpstat
  • pidstat
  • Linux stress 命令

你可能感兴趣的:(linux,bash,ubuntu)