一、平均负载概念
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程
数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用
ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。
不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,
比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态
(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是
不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程
被打断了,就容易出现磁盘数据与进程数据不一致的问题。
所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。
以下为系统中显示 Linux load averages 的实例:
# 方法一:uptime
$ uptime
16:48:24 up 4:11, 1 user, load average: 25.25, 23.40, 23.46
# 方法二:top
top - 16:48:42 up 4:12, 1 user, load average: 25.25, 23.14, 23.37
# 方法三:cat /proc/loadavg
$ cat /proc/loadavg
25.72 23.19 23.35 42/3411 43603
如果平均值为 0.0,意味着系统处于空闲状态
如果 1min 平均值高于 5min 或 15min 平均值,则负载正在增加
如果 1min 平均值低于 5min 或 15min 平均值,则负载正在减少
如果它们高于系统 CPU 的数量,那么系统很可能会遇到性能问题(视情况而定)
平均负载最理想的情况是等于 CPU 个数。所以在评判平均负载时,首先你要知
道系统有几个 CPU,这可以通过 top 命令或者从文件 /proc/cpuinfo 中读取
二、平均负载与 CPU 使用率
平均负载是指单位时间内,处于可运行状态和不可
中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待
I/O 的进程。
而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比
如:
CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高
三、查证问题用到的命令
1.先看负载情况
[root@localhost ft_mt]# uptime
10:39:51 up 117 days, 1:13, 9 users, load average: 0.00, 0.00, 0.00
2.查看CPU的负荷情况
# -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据
[root@localhost ft_mt]# mpstat -P ALL 5
Linux 2.6.32-642.13.1.el6.x86_64 (localhost.localdomain) 2021年09月07日 _x86_64_ (32 CPU)
10时40分44秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
10时40分49秒 all 0.01 0.00 0.00 0.01 0.00 0.00 0.00 0.00 99.98
10时40分49秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 7 0.00 0.00 0.00 0.40 0.00 0.00 0.00 0.00 99.60
10时40分49秒 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 17 0.00 0.00 0.00 0.00 0.00 0.20 0.00 0.00 99.80
10时40分49秒 18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 19 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 22 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 24 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 25 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 26 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 27 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 28 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 29 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 30 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10时40分49秒 31 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
3.查看那个进程导致CPU高
# 间隔 5 秒后输出一组数据
$ pidstat -u 5 1