uptime 与平均负载
uptime 一行给出三件事:当前时间、系统已开机的时长、以及 1、5、15 分钟的平均负载。负载(load average)指的是处于可运行状态和不可中断睡眠状态的进程数平均值,它是「有多少任务在排队或等 IO」,而不是 CPU 使用率。这个区别很关键:磁盘慢的时候大量进程卡在 D 状态,负载会明显升高,而 CPU 可能相当空闲。判断负载是否过高,必须结合核数一起看。
基本信息
| 适用平台 | Linux 全发行版与 macOS(coreutils / procps-ng 的 uptime) |
|---|---|
| 命令语法 | uptime [选项] |
| 数据来源 | /proc/loadavg:前三列是 1、5、15 分钟的指数衰减平均值,第四列是当前可运行任务数/总任务数,第五列是最近创建的进程 PID |
| 相关命令 | w 显示负载与登录用户、top 摘要行、cat /proc/loadavg 直接取数、nproc 查看逻辑核数 |
| 权限要求 | 无特殊要求,普通用户即可查看 |
典型使用场景
- 快速体检:登录机器先跑 uptime,判断机器是不是已经过载以及是否近期重启过
- 负载趋势对比:1 分钟高于 15 分钟说明压力正在上升,反之说明正在缓解
- 脚本采集:从 /proc/loadavg 取数比解析 uptime 文本更稳,适合写入监控指标
- 与核数换算:得到 load/核数比值后再决定是否介入,避免单看一个绝对值
- 排查前提:负载高但 CPU 空闲时,把方向转向磁盘、网络存储与 D 状态进程
- 确认重启时间:开机时长能判断机器是否经历过重启或崩溃恢复
常用示例
常用示例
uptime
cat /proc/loadavg # 机器可读格式,适合脚本
nproc # 逻辑核数:负载对比的基准
awk -v n="$(nproc)" '{printf "load1=%.2f ratio=%.2f\n", $1, $1/n}' /proc/loadavg
watch -n2 uptime # 持续观察变化
w # 负载 + 登录用户 + 正在执行的命令
uptime -p # 只输出开机时长的可读形式
uptime -s # 系统启动时刻loadavg 字段读法
| 字段 | 含义 | 怎么看 |
|---|---|---|
| 第 1 列 | 1 分钟平均负载 | 与第 3 列对比判断压力趋势 |
| 第 2 列 | 5 分钟平均负载 | 中期参考,适合判断是否为突发 |
| 第 3 列 | 15 分钟平均负载 | 长期水位,与容量规划相关 |
| 第 4 列 | 运行中任务数 / 总任务数 | 第一个数持续大于核数说明已在排队 |
| 第 5 列 | 最近创建的进程 PID | 可用于判断进程创建是否异常频繁 |
判读基准要把负载除以逻辑核数:比值接近 1 表示基本满载,持续明显大于 1 说明任务在排队,大于 2 通常需要介入。经验阈值不是硬标准,比对外部依赖等待为主的业务(例如大量调用第三方接口)可以承受更高负载,而以计算为主的业务在 1 附近就会明显变慢。
负载高但 CPU 空闲时,方向在 D 状态(不可中断睡眠,通常是等磁盘或网络存储)与内存压力上:查看 top 或 ps 里状态为 D 的进程、看 iostat 的 await 与 util、确认是否发生频繁换页。
容器里的负载读数是宿主机的,不是容器自身的。/proc/loadavg 在内核中全局统计,容器并不能隔离它;要判断容器自身压力应看 cgroup 指标,例如 cpu.stat 里的 nr_throttled 与 throttled_usec,以及内存的 memory.pressure。
uptime 与 top、w 的数据同源:top 摘要行的负载来自同一份内核统计,必然一致;w 除了负载还会列出登录用户与正在执行的命令,登录机器做初步判断时信息更全。判断机器是否刚重启过,用 uptime -p 或 uptime -s 比翻日志更快。