top 输出逐项解读:load、%wa、%us 怎么看
发布时间:2026-01-26 19:47       
更新时间:2026-01-26 22:06
top 命令一打开就是满屏数字,多数人只看第一行的 load。其实把头部几行读明白,八成性能问题当场就能定性。
## 第一行:load 与核数的关系
load average 显示 1、5、15 分钟的平均负载,含义是处于运行或等待状态的进程数。它算不算高要除以核数:4 核机器 load 到 4 就是满载,8 核机器 load 4 只算一半,核数用 nproc 查看。判断趋势比看单点重要:1 分钟远高于 15 分钟,说明负载正在冲高,要立刻介入;反过来则是高峰刚过,观察即可。持续压在核数附近下不来,就该考虑扩容或限流了。
## CPU 行:us、sy、wa 的分工
Cpu(s) 行把时间切成若干份,最值得盯的是三项。%us 是用户态程序占用,业务代码吃 CPU 主要体现在这里;%sy 是内核态占用,长期超过两三成要怀疑系统调用或锁异常;%wa(iowait)是 CPU 空着等磁盘返回的时间占比——它高不代表 CPU 忙,恰恰说明 CPU 在等 IO,瓶颈大概率在磁盘。第二行的 tasks 里有一项 zombie,数字不为零说明存在僵尸进程,一般是父进程没回收子进程。僵尸进程本身不占多少资源,但要找到它的父进程处理根源。
## 进程区:VIRT、RES 与 %CPU
进程列表默认按 CPU 排序,按 Shift+M 改按内存。VIRT 是申请的虚拟地址空间,普遍很大,不用紧张;RES 是实际占用的物理内存,容量规划看它。%CPU 按单核 100% 计,8 核机器上一个进程要到 800 才是吃满全部核。
## wa 高之后的动作
看到 %wa 高,先别动 CPU。用 iostat -x 1 看设备的 %util 与 await,用 pidstat -d 1 找出读写量大的进程,顺藤摸瓜定位业务。load 高的原因可能是 CPU 计算,也可能是 IO 等待,也可能是不可中断睡眠(D 状态)进程堆积,ps aux | awk '$8~/D/' 能数出 D 状态进程。
排查前后记得留证据:top -b -n1 > /tmp/snapshot.txt 把当前画面存成文件,事后对比才有依据。top 是第一现场,读懂它再决定用哪个工具深挖,比一上来就装全套监控务实。