top/htop 命令速查表 - Linux 系统监控常用命令大全
机器一慢,多数人先敲 top,但屏幕上的 Load Average 只是起点:它统计的是可运行态和不可中断睡眠态的任务,进程卡在磁盘 IO 上的 D 状态同样会把它顶高,而真正的 CPU 瓶颈要看 %us 与 %sy 加上按 CPU 排序的进程列。所以正确读法是先用交互排序(按 P、M、%CPU、%MEM 依次切换)锁定元凶进程,再回头看 si/hi 是否异常、wa 是否说明 IO 打满,最后用内存与 swap 三行区分是泄漏还是单纯不够用;瞬时的尖峰要结合采样间隔看。表里同时收录 top 的一次性批处理导出(-b -n1 单次采样、top -H 展开线程),可把多次采样存成文件做差分对比;htop 部分则补上它比 top 多出的树形视图、搜索过滤与快捷键切换。想要长时趋势,别反复手动刷新,用 vmstat 或 pidstat 交叉验证更可靠。
典型使用场景
面向需要快速判断「机器卡在哪」的运维与开发人员。top 的难点在于负载均值会骗人:load 高但 CPU idle 也高,通常是磁盘或网络 IO 在阻塞而不是 CPU 不够;而 D 状态(不可中断睡眠)进程堆积意味着底层存储已经超载,这类进程连 kill -9 都要等 IO 返回。本表把交互排序键、批处理参数与关键指标判断标准放在一起,适合配合脚本做自动化巡检。
top 基础命令 6
toptop -d 5top -p 1234top -u usernametop -n 10top -b -n 1 > top.logtop 交互命令 8
h / ?qSpacekrnsWtop 排序与显示 10
MPTNcHi1fohtop 基础命令 5
htophtop -d 5htop -u usernamehtop --no-colorhtop --treehtop 交互命令 17
F1 / h / ?F2 / SF3 / /F4 / \F5 / tF6 / >F7 / [F8 / ]F9 / kF10 / qSpaceUcHKpt系统负载指标 Load Average 6
1分钟 / 5分钟 / 15分钟> CPU核心数tasks: total / running / sleeping / stopped / zombie%Cpu(s): us / sy / ni / id / wa / hi / si / stMiB Mem: total / free / used / buff/cacheMiB Swap: total / free / used参数矩阵
| 参数 | 作用 | 示例 |
|---|---|---|
top -b -n 1 | 批处理输出单帧,便于接管道或写脚本 | top -b -n 1 | head -20 |
top -p <pid> | 只监控指定进程 | top -p 3120 -d 2 |
top -u <user> | 只看某用户的进程 | top -u tom |
top -d <n> | 设置刷新间隔(秒) | top -d 2 |
P / M / T / N | 交互排序:CPU / 内存 / 时间 / PID | 进入 top 后按 M |
top -o %MEM | 批处理模式也能按内存排序 | top -b -n 1 -o %MEM |
k | 杀进程(输入 PID,无二次确认) | top 中按 k 后输 PID |
c | 切换显示完整命令行路径 | top 中按 c |
htop | 彩色交互式替代,支持鼠标与过滤 | htop --tree |
1分钟/5分钟/15分钟 | load average 三个值,与核心数比较才有意义 | 与 nproc 结果对比 |
tasks 行 | running / sleeping / zombie 进程计数 | 关注 zombie 数 |
%Cpu(s) 行 | us 用户 / sy 系统 / id 空闲 / wa IO 等待 | wa 高说明 IO 阻塞 |
易错点与避坑指南
现象load average 很高但 CPU 使用率却很低。
原因load 统计的是「可运行 + 不可中断」任务,磁盘或网络 IO 阻塞会让进程进入 D 状态而 CPU 空闲。
处置看 %Cpu(s) 里的 wa(IO 等待)是否高,并检查 tasks 行是否有大量 D 状态进程。
现象内存 free 很低,怀疑内存不足。
原因Linux 把空闲内存用于页缓存(buff/cache),这部分可随时回收。
处置看 available 那一列;同时检查 swap 是否在持续读写,只有两者都告急才是真压力。
现象top 里按 k 误杀了关键进程。
原因k 立即发送信号且无二次确认。
处置输入 PID 前再次确认;关键环境先记录 PID 以便恢复。
现象采到的瞬时数据不准,几次运行结果差很多。
原因top 默认每 3 秒刷新,单帧是采样瞬间而非稳定值。
处置脚本采集用 top -b -n 1 取单帧,或用 -d 1 缩短间隔取多帧判断趋势。
现象大量僵尸进程(Z 状态)无法清除。
原因僵尸进程的父进程已死,需要由父进程回收。
处置找到 PPID 并重启父进程;kill 子进程无效。
现象swap 一直在读写,但系统内存看起来还够用。
原因页面缓存之外的活跃内存已超出物理内存,或 vm.swappiness 设置偏高导致过早换出。
处置先用 free -h 看 available 而非 free;确认换页是持续还是瞬时,瞬时换页属正常回收行为。
排障路径
1取一帧输出做脚本判断
top -b -n 1 | head -3批处理不刷新只输出一次,可直接 grep 指标行做阈值判断。
2看谁在吃内存
top -b -n 1 -o %MEM | head -12-o 让批处理也能排序,不用进交互界面。
3盯住单个进程的波动
top -p 3120 -d 2-d 2 把刷新降到 2 秒,比默认更适合盯突发占用。
4确认 CPU 核数以判断 load 是否过高
nprocload 平均值必须与核数比较才有意义,单看绝对值会误判。
5需要鼠标与过滤时换 htop
htop --tree支持点击排序、F4 过滤、树形看父子进程,多进程排查更直观。
命令示例
只看最耗 CPU 的 10 个进程
top -b -n 1 | head -20-b 批处理模式不刷新、只输出一次,-n 1 表示跑一轮就退出——这样能直接接管道或写进脚本。交互式 top 里按 P 也是按 CPU 排序。
输出
%Cpu(s): 12.5 us, 3.1 sy, 84.4 id, 0.0 wa Tasks: 231 total, 1 running, 230 sleeping %Cpu PID COMMAND 48.2 3120 node 21.7 980 postgres
只监控指定 PID 的资源占用
top -p 3120 -d 2-d 2 把刷新间隔设为 2 秒,比默认的 3 秒更适合盯突发占用。定位「哪个进程吃内存」时配合交互模式的 M 键按内存排序更快。
输出
%Cpu(s): 5.1 us, 1.0 sy, 93.9 id PID USER PR VIRT RES SHR S %CPU %MEM 3120 user 20 1.2g 318m 22m S 48.2 8.1
用排序键直接找出内存占用最高的进程
top -b -n 1 -o %MEM | head -12-o %MEM 让批处理模式也能排序,不用进交互界面。临时排查一行命令即可拿到结果,比进 top 再按 M 更适合写进脚本。
输出
%Cpu PID COMMAND 18.2 1452 chrome 12.7 2031 electron 9.4 3120 node
常见坑与注意事项
- load average 要与 CPU 核心数比较才有意义;load 高而 CPU idle 也高,通常是磁盘或网络 IO 在阻塞,不是 CPU 不够。
- D 状态(不可中断睡眠)进程正在等内核 IO,连 kill -9 都要等 IO 返回;这类进程堆积应查存储瓶颈而不是重启应用。
- top 默认 3 秒刷新,采集瞬时数据容易失真;批处理用 top -b -n 1 输出单帧。
- free 显示 free 很低不代表内存不足,Linux 会把空闲内存用作页缓存;判断标准是 available 与 swap 是否持续读写。
- 在 top 里按 k 杀进程会立即发送信号且不二次确认,输入 PID 前先确认目标。
提示
- top 是系统自带,htop 需要安装但界面更友好、功能更强大。
- Load Average 超过 CPU 核心数表示系统过载,需要排查高负载进程。
- wa(IO wait)高表示磁盘 IO 瓶颈,hi/si(中断)高表示网络或硬件问题。
- top -b -n1 > s1.txt 采样后隔 30 秒再采一次,两份文件 diff 出突增进程,比盯屏幕准。
- 按 1 键展开每个进程的线程视图,Java/Python 这类多线程进程的总 %CPU 是各线程之和,不是单线程值。
- htop 里 F5 按线程显示、F6 排序、F7/F8 调整 nice 值,可替代多次 sudo renice 操作。
常见问题
load average 多少算过高?
判断标准不是绝对值,而是和 CPU 核心数比:1 分钟、5 分钟、15 分钟三个值持续高于核心数就说明有进程排队。在 top 里同时看 tasks 行的 running 与 zombie 数量,以及 %Cpu(s) 里的 us 实际占用——load 高但 CPU idle 很高,通常是磁盘或网络 IO 在阻塞,不是 CPU 不够。
top 里 D 状态进程意味着什么?
D 是不可中断睡眠(uninterruptible sleep),进程正在等待内核级 IO 完成,通常是磁盘或网络读写卡住。它比 R(运行中)更值得关注,因为 D 状态进程连 kill -9 都要等 IO 返回才能结束。如果 D 状态进程持续堆积,说明底层存储或网络已经严重超载,此时重启应用往往无效,要先排查 IO 瓶颈。
top 和 htop 怎么选?
top 是系统自带、无需安装,脚本里或只有一台裸机 SSH 时最省事;htop 要额外安装,但支持鼠标点选排序、树形显示进程父子关系、以及 F4 直接过滤,排查多进程场景比 top 直观得多。两者键盘交互键位也不同:top 按 P 按 CPU 排序、M 按内存排序,htop 用 F6 或直接点击表头排序。
top 显示的内存占用为什么和 free 不一致?
因为 Linux 会把空闲内存拿去做页缓存,所以 MiB Mem 里的 free 很低而 buff/cache 很高并不代表内存不足——这部分缓存可被随时回收。判断是否真的缺内存要看 available 那一列,以及是否发生了 swap。若 available 也很低且 swap 在持续读写,才是真的内存压力。
在 top 里怎么按条件只看某个用户的进程?
两种方式:启动时用 top -u username 直接限定用户,输出第一列为空说明筛选没生效时先确认用户名拼写;或者启动 top 后在交互中输入 u 再回车,输入目标用户名。只想盯某个 PID 则用 top -p 1234,比进去后再逐层翻找快得多。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。