loadavg 是什么
Linux 的 /proc/loadavg 是一行五段文本,依次是 1、5、15 分钟平均负载、当前可运行任务数与系统任务总数、以及最近创建的进程 PID。这里的负载不等于 CPU 使用率:Linux 把处于 D 状态(不可中断睡眠,多在等磁盘或网络存储)的任务也计入,所以它衡量的是「正在运行或卡在等待」的任务规模,量纲与逻辑核数相同——单核满载约等于 1。
基本信息
| 读取路径 | /proc/loadavg,uptime 与 top 首行同源 |
|---|---|
| 字段数 | 5 段:1min 5min 15min 运行中/总任务 最近PID |
| 时间常数 | 指数平滑,分别约 1、5、15 分钟 |
| 比较基准 | 逻辑核数(nproc、lscpu) |
| 读写属性 | procfs 只读,无需权限 |
典型使用场景
- 登录后第一眼判断忙闲:远低于核数说明空闲,接近或超过说明已饱和
- 区分 CPU 忙与 I/O 阻塞:负载高而 mpstat 的 %idle 仍高,多半是 D 状态堆积
- 容量决策:15 分钟均值长期贴着核数,说明这台机器再压就排队
- 脚本采集告警:用 awk 取第一段做阈值判断,配合时间戳留档
- 故障复盘:与监控 CPU 曲线对照,判断故障期间是否出现排队
读取与现场确认
读取与现场确认
cat /proc/loadavg # 一行原始数据,最省事的读法
uptime # 带开机时长与负载的常规视图
nproc # 逻辑核数,负载的比较基准
awk '{print $1}' /proc/loadavg # 取 1 分钟均值做脚本判断
vmstat 1 3 # r 列是瞬时运行队列长度,比均值及时
ps -eo state,pid,comm | awk '$1 ~ /^D/' # 谁卡在 I/O 等待里
cat /proc/stat | grep procs # procs_running 与 procs_blocked 原始计数字段逐列读法
| 字段 | 含义 | 正常与异常 |
|---|---|---|
| 第 1 段 | 1 分钟平均负载 | 反应最快,持续高于逻辑核数即为过载 |
| 第 2 段 | 5 分钟平均负载 | 与 1 分钟配合判断趋势方向 |
| 第 3 段 | 15 分钟平均负载 | 高而 1 分钟已回落,说明压力刚缓解 |
| 第 4 段 | 运行中任务/任务总数 | 分子长期大于核数即排队,分母是整机任务规模 |
| 第 5 段 | 最近创建的进程 PID | 仅作提示,不用于容量判断 |
负载是内核按指数衰减平滑出来的,瞬时尖峰被摊平;要抓瞬时排队要看 vmstat 的 r 列或 /proc/stat 的 procs_running。
把 D 状态计入负载是 Linux 特有的口径,与 BSD/Unix 系不同,同样的数字在两种系统上含义并不等价。
容器内读到的是宿主机整机负载,不代表容器自身压力;容器视角应看 cgroup 的 cpu.stat(nr_throttled、throttled_usec)与 cpu.pressure。