Linux平均负载

一、什么是平均负载

平均负载(Load Average)是指一段时间内,系统处于可运行状态和不可中断状态的平均进程数,这个一段时间一般取 1 分钟、5 分钟、15 分钟。

CPU 使用率是单位时间内 CPU 繁忙情况的统计,跟平均负载并不完全对应,平均负载不仅包括正在使用 CPU 的进程,还包括等待 CPU等待 I/O的进程,比如:

  • CPU 密集型进程,使用大量 CPU 回导致平均负载升高
  • I/O 密集型进程,等待 I/O 也会使平均负载升高,但 CPU 使用率不一定高
  • 大量等待 CPU 的进程调度也会导致平均负载升高,此时 CPU 使用率也会比较高

如何查看平均负载

top,uptime,w 等命令都可以查看系统负载:

1
2
$ uptime
12:04 up 8 days, 2:33, 2 users, load averages: 4.14 5.85 5.24

二、平均负载实际应用

获取 CPU 核心数

考虑了 CPU 核心数的影响,才能解释系统负载。可以使用 nproc 或 lscpu 命令查看系统中的处理器单元数量。

1
2
3
4
$ nproc
4
# 或者
lscpu

或者使用 grep 命令查看 /proc/cpuinfo

1
2
$ grep 'model name' /proc/cpuinfo | wc -l
4

平均负载多少比较合理

那么在实际生产环境中,平均负载多少比较合理呢,个人认为:

  • 平均负载低于 CPU 数量的 70%的时候,系统还是比较空闲的
  • 平均负载高于 CPU 数量 70%的时候,你就应该分析负载高的原因了
  • 平均负载高于 CPU 数量的时候意味着有部分进程竞争不到 CPU,将会有性能问题。

但是 70%并不是绝对的,我们需要分析系统负载趋势,才能更全面的处理问题,结合具体情况具体分析,假设单核情况下:

  • 1 分钟 Load>5,5 分钟 Load<1,15 分钟 Load<1:短期内繁忙,中长期空闲,初步判断是一个“抖动”或者是“拥塞前兆”
  • 1 分钟 Load>5,5 分钟 Load>1,15 分钟 Load<1:短期内繁忙,中期内紧张,很可能是一个“拥塞的开始”
  • 1 分钟 Load>5,5 分钟 Load>5,15 分钟 Load>5:短中长期都繁忙,系统“正在拥塞”
  • 1 分钟 Load<1,5 分钟 Load>1,15 分钟 Load>5:短期内空闲,中长期繁忙,不用紧张,系统“拥塞正在好转”

三、如何分析排查平均负载

  • 运行 uptime 或者 top 命令查看平均负载的变化情况
1
2
$ watch -d uptime
14:55:16 up 5:39, 7 users, load average: 0.15, 0.05, 0.01
  • 运行 mpstat 查看 CPU 使用率的变化
1
2
3
4
5
6
7
8
9
10
# -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据
$ mpstat -P ALL 5
Linux 4.8.0-54-generic (zubin-pc) 2021年07月18日 _x86_64_ (4 CPU)

14时56分15秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
14时56分20秒 all 0.20 0.00 0.15 0.00 0.00 0.00 0.00 0.00 0.00 99.65
14时56分20秒 0 0.00 0.00 0.00 0.00 0.00 0.20 0.00 0.00 0.00 99.80
14时56分20秒 1 0.20 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.40
14时56分20秒 2 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80
14时56分20秒 3 0.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.00
  • 运行 pidstat 查看进程的 CPU、内存、线程、设备 IO 等系统资源的占用情况
1
2
3
4
5
6
7
8
9
10
11
12
$ pidstat -u 5
Linux 4.8.0-54-generic (zubin-pc) 2021年07月18日 _x86_64_ (4 CPU)

14时57分20秒 UID PID %usr %system %guest %CPU CPU Command
14时57分25秒 0 1118 0.60 0.40 0.00 1.00 2 Xorg
14时57分25秒 0 1499 0.00 0.20 0.00 0.20 1 vmtoolsd
14时57分25秒 1000 1830 0.40 0.20 0.00 0.60 3 compiz
14时57分25秒 1000 2310 0.00 0.40 0.00 0.40 1 /usr/bin/x-term
14时57分25秒 1000 7441 0.20 0.00 0.00 0.20 1 pidstat
14时57分25秒 1000 8169 0.00 0.20 0.00 0.20 0 iostat
14时57分25秒 1000 8901 0.20 0.20 0.00 0.40 3 top
14时57分25秒 1000 10034 0.20 0.20 0.00 0.40 3 pidstat