下面我将为你详细解析 top 命令的各种参数,分为两部分:

- 启动参数:在命令行后直接跟的参数,用于控制
top启动时的初始显示状态。 - 交互式命令:在
top运行界面中,按下的按键,用于动态改变显示内容和行为。
启动参数
这些参数在 top 命令后面直接指定,top -p 1234 -b。
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-b |
batch |
批处理模式,不使用交互式界面,将输出重定向到文件或管道中,非常适合用于脚本自动化。 | top -b -n 1 > top.log (抓取一次快照并保存到文件) |
-c |
command |
显示完整的命令行,而不仅仅是进程名,这对于识别具体是哪个命令或脚本在消耗资源非常有用。 | top -c |
-d |
delay |
设置刷新间隔,单位为秒,默认是 3 秒,可以使用小数,如 5 表示半秒刷新一次。 |
top -d 1 (每秒刷新一次) |
-H |
threads |
线程模式,将每个线程(轻量级进程 LWP)都作为一个独立的进程显示,而不是将它们汇总到父进程下,这对于排查多线程程序的瓶颈至关重要。 | top -H |
-i |
idle |
忽略空闲进程,不显示处于空闲状态(D 状态,不可中断睡眠)或僵死状态(Z 状态)的进程,这样可以更专注于活跃的进程。 |
top -i |
-n |
iterations |
设置 top 刷新的次数,与 -b 参数配合使用,可以实现抓取指定次数的快照后自动退出。 |
top -b -n 5 (批处理模式,刷新5次后退出) |
-p |
pids |
监控指定进程,只监控指定的一个或多个 PID(进程 ID),多个 PID 用逗号隔开。 | top -p 1234,5678 (只监控 PID 为 1234 和 5678 的进程) |
-s |
sorting |
指定排序的字段,默认是按 %CPU 降序排列,可以指定 或 来控制升序或降序。 |
top -s +MEM (按内存使用率升序排列) |
-u |
user |
监控指定用户,只显示属于特定用户的进程。 | top -u nginx (只显示 nginx 用户的进程) |
-U |
user |
监控指定用户(按真实用户ID),与 -u 类似,但它匹配的是真实的用户 ID,而不是用户名。 |
top -U 0 (只显示 UID 为 0 的用户,即 root) |
交互式命令
当 top 命令运行后,你可以在其界面中按下各种按键来实时改变显示,这些命令是大小写敏感的。
| 按键 | 功能描述 |
|---|---|
q |
退出 top,这是最常用的退出命令。 |
h 或 |
显示帮助界面,列出所有可用的交互式命令。 |
c |
切换命令行显示,在完整命令行和进程名之间切换。 |
m |
切换内存显示,在内存占用(MEM%)和虚拟内存占用(VIRT, RES, SHR)的详细信息之间切换。 |
t |
切换进程和线程显示,在进程视图和线程视图(类似 -H 参数)之间切换。 |
p |
按 CPU 使用率排序,默认排序方式,降序排列。 |
M |
按内存使用率排序,按 MEM% 字段降序排列。 |
T |
按时间/累计 CPU 时间排序,按 TIME+ 字段降序排列。 |
A |
按进程年龄排序,按进程启动时间排序。 |
P |
按 CPU 使用率排序,与 p 键功能相同,确保按 CPU 降序排列。 |
N |
按 PID 排序,按进程 ID 数字升序排列。 |
f 或 F |
添加/删除字段,进入字段编辑界面,你可以通过按 d 删除字段,按 s 添加字段,按 q 退出编辑。 |
S |
累计模式开关,切换显示进程的 CPU 时间是瞬时值还是累计值。 |
i |
忽略空闲/僵死进程,与启动参数 -i 功能相同,可以实时开关。 |
s |
修改刷新间隔,会提示你输入新的刷新时间(秒)。 |
k |
终止进程,提示你输入要终止的 PID 和信号(默认是 15,即 SIGTERM)。 |
r |
重新设置进程优先级,提示你输入 PID 和新的 nice 值(范围 -20 到 19)。 |
l |
切换负载平均信息显示,显示或不显示顶部的系统负载信息。 |
t |
切换任务/CPU 信息显示,显示或不显示顶部的任务和 CPU 核心信息。 |
1 |
切换总 CPU 和各核心 CPU 显示,在显示所有核心的占用情况和只显示总 CPU 占用情况之间切换。 |
top 界面主要字段解释
理解这些字段是使用 top 的基础:
| 字段 | 含义 |
|---|---|
PID |
进程 ID (Process ID) |
USER |
进程所有者 |
PR |
优先级 |
NI |
nice 值,负值表示高优先级,正值表示低优先级。 |
VIRT |
虚拟内存总量 (Virtual Memory Size),包括进程使用的所有内存,如代码、数据、共享库、被交换出的页面等。 |
RES |
常驻内存大小 (Resident Memory Size),这是进程当前实际物理内存占用,不包括被交换到磁盘的部分。 |
SHR |
共享内存大小 (Shared Memory Size),进程与其他进程共享的内存大小。 |
S |
进程状态。R (运行), S (睡眠), D (不可中断睡眠), Z (僵尸), T (已停止) |
%CPU |
CPU 使用率,进程当前占用的 CPU 百分比。 |
%MEM |
内存使用率,进程当前占用的物理内存百分比。 |
TIME+ |
进程自启动以来占用的总 CPU 时间。 |
COMMAND |
启动进程的命令。 |
常用组合示例
-
查看指定用户的进程,并按内存排序
(图片来源网络,侵删)top -u nginx -s +MEM
或者进入
top后按u键输入nginx,再按M键。 -
以批处理模式抓取一次系统快照并保存到文件
top -b -n 1 > top_snapshot.txt
-
查看指定 PID 的线程详情
# 先找到 PID ps aux | grep my_app # 假设 PID 是 1234 top -H -p 1234
-
实时监控系统负载,并每秒刷新
(图片来源网络,侵删)top -d 1
-
查看系统中占用 CPU 最高的前10个进程
# 启动后按大写 P 键排序,或者直接用管道 top -b -n 1 | head -n 17 # 前17行是头部信息 top -b -n 1 | grep '[0-9]' | sort -k %CPU -r | head -n 10
希望这份详细的参数和命令列表能帮助你更好地掌握 top 命令!
