5 分钟上手 top
本页承诺:5 分钟内学会用 top 回答三个问题——系统忙不忙、CPU 耗在哪一类、哪个进程/线程在烧 CPU。top 自带、免安装,是排查的"第一现场"。
阅读时间约 4 分钟 + 动手 3 条命令。完整版见 top 使用教程。
第 1 步:确认有 top
bash
which top # 输出路径即已安装(几乎都自带,属 procps 包)
# 没有就装:yum install -y procps / apt install -y procps第 2 步:造一个"CPU 高"的靶子
用本仓库自带演示程序(场景 1 是用户态热循环):
bash
cd <本仓库路径>/demos/cpu-demo
make && ./cpu_demo # 选场景 1(用户态 CPU 高),让它一直跑另开一个终端做第 3 步。
第 3 步:三连跑通
① 看整机忙不忙(第一屏)
bash
top看前 3 行:
| 行 | 看什么 | 怎么判 |
|---|---|---|
| 第 1 行 | load average: 1.25, 0.98, 0.75 | 三个数是 1/5/15 分钟平均运行队列。和核数比:≈核数=满载,>核数=在排队;看趋势:递增=负载在涨 |
| 第 2 行 | Tasks: ... zombie | zombie 非 0 = 有子进程没被父进程回收,要查父进程 |
| 第 3 行 | %Cpu(s): 6.3 us, 2.1 sy, 0.5 wa, 90.8 id... | us 用户态高→业务/计算;sy 内核态高→频繁系统调用(去 strace);wa 高→等磁盘 IO(去 iostat);id 高→CPU 不忙 |
② 定位烧 CPU 的进程/线程
bash
top -p <CPU高进程的PID> # 只看目标进程
top -H -p <PID> # 展开它的每个线程(多线程排查必用)进程列表默认按 %CPU 排序——最高的那个就是当前热点。
③ 拿一份"可留档"的快照
bash
top -b -n 1 > top-snapshot.txt # 批处理跑 1 次,输出存文件,方便对比前后交互快捷键:按
1把 CPU 展开成每个核心一行;按M切换按内存排序;按c显示完整命令行。
常见坑(3 秒自查)
| 现象 | 原因 | 解决 |
|---|---|---|
第一屏 %CPU 巨大/不准 | top 拿"开机以来累计值"算的,非实时 | 忽略第一屏,看第二次刷新起的数值 |
| 找不到目标进程 | 进程名被截断或同名进程多 | 按 c 看完整命令行;或 top -u <用户名> |
%Cpu(s) 全是 id 但程序很慢 | CPU 不是瓶颈 | 转向内存/IO/锁:vmstat、iostat、perf 深入 |
| 想让 top 快点/慢点刷新 | 默认 3 秒 | top -d 1 或 top -d 5 |
深度入口
- top 使用教程—— 全部字段详解、
/proc/stat数据来源 - 5 分钟上手 vmstat—— 一屏看 CPU/内存/IO/调度的大方向
- 5 分钟上手 perf—— 从"哪个进程"到"哪个函数"
- 5 分钟上手系列
一句话总结:top 三步 = top 看整机三行(load / %Cpu(s) / zombie)→ top -H -p <PID> 定位线程 → top -b -n 1 留快照,5 分钟判定"系统忙不忙、CPU 花在哪、谁在烧"。