平均负载
什么是平均负载
平均负载时指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率没有直接关系。
可运行状态的进程
指正在使用 CPU 或者正在等待 CPU 的进程数。也就是说我们常用 ps aux 命令看到的,处于 R 状态 (Running 或 Runnable)的进程。
不可中断状态的进程
指正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们再 ps aux 命令中看到的 D 状态(Uninterruptible Sleep, 也称为 Disk Sleep)的进程。
平均负载为多少时合理
平均负载最理想的情况是等于 CPU 个数,所以在评价平均负载时,首先需要知道系统有几个CPU。有了 CPU 个数,我们就可以判断出,当平均负载比 CPU 个数还大的时候,系统已经出现了过载。
实际环境中,当平均负载高于 CPU 数量 70% 的时候,就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。
平均负载与 CPU 使用率
平均负载时指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了‘正在使用 CPU的进程,还包括等待 CPU和等待 I/O的进程。
而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。
例如:
- CPU密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的。
- I/O密集型进程,等待 I/O 也会导致平均负载升高,但是 CPU 使用率不一定很高。
- 大量等待 CPU 的进程也会导致平均负载升高,此时的 CPU 使用率也会比较高
分析平均负载使用的命令
1. uptime
当发现系统变慢时可以通过uptime命令来了解系统的负载情况。
$ uptime
02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88
uptime 命令每列含义
02:34:03 // 当前时间
up 2 days, 20:14 // 系统运行时间
1 user // 正在登陆用户数
0.63 // 1分钟平均负载
0.83 // 5分钟平均负载
0.88 // 5分钟平均负载
- 如果1分钟,5分钟,15分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
- 如果1分钟的值远大于15分钟的值,就说明最近1分钟的负载在增加,这种增加可能是临时性的,也有可能是持续性的,需要持续观察。一旦1分钟的平均负载接近或超过了CPU的个数,就意味着系统正在发生过载的问题。
2. mpstat
mpstat是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。

- 当遇到 CPU 密集型进程的时候,%usr 的数值会逐渐升高,而 %iowait 的数值不会增加。
- 而遇到 I/O 密集型进程的时候, %iowait 的数值会快速上升,而 %user 的数值增加则不多。
3. pidstat
pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU,内存,I/O 以及上下文切换等性能指标。