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 | $ uptime |
二、平均负载实际应用
获取 CPU 核心数
考虑了 CPU 核心数的影响,才能解释系统负载。可以使用 nproc 或 lscpu 命令查看系统中的处理器单元数量。
1 | $ nproc |
或者使用 grep 命令查看 /proc/cpuinfo
1 | $ grep 'model name' /proc/cpuinfo | wc -l |
平均负载多少比较合理
那么在实际生产环境中,平均负载多少比较合理呢,个人认为:
- 平均负载低于 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 | $ watch -d uptime |
- 运行 mpstat 查看 CPU 使用率的变化
1 | # -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据 |
- 运行 pidstat 查看进程的 CPU、内存、线程、设备 IO 等系统资源的占用情况
1 | $ pidstat -u 5 |