top 命令使用时使用快捷键可以修改部分视图——相关技巧(shift +v 树状图显示)
如果只需静态查看某个进程的线程列表:ps -T -p <PID>
(1)top 命令开启后小写的h 显示帮助_
Help for Interactive Commands - procps-ng 3.3.16 Window 1:Def: Cumulative mode Off. System: Delay 3.0 secs; Secure mode Off. Z,B,E,e Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale l,t,m Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info 0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode f,F,X Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right R,H,J,C . Toggle: 'R' Sort; 'H' Threads; 'J' Num justify; 'C' Coordinates c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify x,y . Toggle highlights: 'x' sort field; 'y' running tasks z,b . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y') u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria n,#,^O . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s) V,v . Toggle: 'V' forest view; 'v' hide/show forest view children k,r 操作进程:'k' 杀死;'r' 设置优先级 d or s 设定更新间隔 W,Y Write configuration file 'W'; Inspect other output 'Y' q Quit ( commands shown with '.' require a visible task display window ) Press 'h' or '?' for help with Windows, Type 'q' or <Esc> to continue
top 命令(procps-ng 3.3.16 版本)交互式帮助的解析和翻译。它将帮助信息分门别类,以便于理解。
全局概览
-
程序名称:
top(来自 procps-ng 软件包,版本 3.3.16) -
运行模式: 常规模式(非累计模式)。累计模式会显示进程自启动以来的总 CPU 时间,而非相对上一刷新周期的增量。
-
刷新间隔: 3.0 秒
-
安全模式: 关闭。这意味着一些危险命令(如
k杀死进程)是可用的。
命令分类解析
1. 全局显示设置 (影响整个界面)
| 快捷键 | 功能描述 |
|---|---|
Z |
循环切换颜色主题方案。 |
B |
切换是否使用粗体显示。 |
E / e |
摘要信息内存单位缩放:在屏幕顶部的系统摘要信息(内存、交换空间)中,使用 E (大写) 循环切换单位(KiB, MiB, GiB...);使用 e (小写) 在任务区的内存信息列中循环切换单位。 |
z |
切换彩色或单色显示模式。 |
b |
切换粗体或反显(仅当高亮功能 x 或 y 开启时有效)。 |
0 (零) |
切换是否在数字显示中隐藏零点(使显示更紧凑)。 |
2. 摘要信息区切换 (屏幕顶部)
| 快捷键 | 功能描述 |
|---|---|
l |
切换显示/隐藏 系统平均负载 (Load Average) 行。 |
t |
切换显示 任务和 CPU 状态 的格式(数字/条形图/完全隐藏)。 |
m |
切换显示 内存和交换空间使用情况 的格式(数字/条形图/完全隐藏)。 |
1 (数字1) |
切换显示 所有 CPU 的总体状态 还是 每个逻辑 CPU 的单独状态。 |
3. 任务显示区字段管理
| 快捷键 | 功能描述 |
|---|---|
f / F |
字段管理:进入一个界面,可以添加、移除 任务显示区中的信息列,或改变列的顺序和排序依据。这是最强大的自定义功能之一。 |
X |
增加固定宽度:扩大“命令”列或其他固定宽度列的显示宽度,以便看到更长的内容。 |
c |
切换显示 进程的命令行名称 或 完整的命令行。 |
i |
切换显示/隐藏 空闲进程(即显示所有进程还是只显示活跃进程)。 |
S |
切换 累计时间模式:显示进程自启动以来的总 CPU 时间,还是最近一个刷新周期内使用的 CPU 时间。 |
J |
切换任务区中数字数据的数字对齐方式(右对齐或左对齐)。 |
j |
切换任务区中文本数据的文本对齐方式(左对齐或右对齐)。 |
C |
切换显示/隐藏 CPU 坐标信息(对于了解进程在哪个 CPU 核心上运行很有用)。 |
4. 排序、定位与搜索
| 快捷键 | 功能描述 |
|---|---|
< / > |
移动排序列:将当前的高亮排序字段向左 (<) 或向右 (>) 移动,从而改变排序依据。 |
R |
切换正常/反向排序。 |
L / & |
定位进程:按 L 后输入一个字符串来查找匹配的进程;按 & 可以继续查找下一个匹配项。 |
x |
高亮显示当前排序所依据的列。 |
y |
高亮显示当前正在运行的进程。 |
5. 视图与过滤
| 快捷键 | 功能描述 |
|---|---|
V |
切换树状视图(森林视图),以层级结构显示进程父子关系。 |
v |
在树状视图下,折叠或展开选中进程的子进程。 |
u / U |
按用户过滤:按 u 或 U 后输入用户名,u 过滤有效用户,U 过滤任意用户(真实、有效、保存等)。 |
o / O |
按其他条件过滤:允许您设置复杂的过滤器(例如 CPU>10.0 显示 CPU 使用率大于 10% 的进程)。o 是大小写敏感的,O 是不敏感的。 |
n / # |
设置最大任务显示数量:按 n 或 # 后输入一个数字,限制界面中显示的任务行数。 |
Ctrl + O |
显示当前活动的过滤器。 |
H |
切换显示线程还是进程。开启后,将显示所有线程,而不只是进程的汇总信息。 |
I |
切换 Irix 模式 与 Solaris 模式。这影响 CPU 使用率的计算方式:Irix 模式下,多核 CPU 的总使用率可能超过 100%;Solaris 模式下,总会按 100% 归一化。 |
6. 进程操作 (需要权限)
| 快捷键 | 功能描述 |
|---|---|
k |
杀死进程:选择一个进程后按 k,输入信号(默认为 15 SIGTERM),即可向该进程发送终止信号。 |
r |
重新设置优先级 (Nice值):选择一个进程后按 r,输入新的 Nice 值(通常 -20 到 19,值越低优先级越高),即可改变其调度优先级。 |
7. 系统与控制
| 快捷键 | 功能描述 |
|---|---|
d 或 s |
改变刷新间隔延迟:输入一个新的时间(如 2.5 或 10),单位是秒。 |
W |
将当前配置写入文件 (~/.toprc)。这样下次启动 top 时会保持本次的所有设置。 |
Y |
检查其他进程的输出:类似于 ps 命令的功能,可以查看指定进程的详细信息。 |
q 或 Esc |
退出 top 程序。 |
重要提示
-
帮助信息底部括号中的说明
( commands shown with '.' require a visible task display window )意思是:所有在帮助列表中前面带有一个点.的命令(在此解析中已用.标出),都需要任务显示窗口处于可见状态(即没有被隐藏)才能使用。 例如,如果按t和m隐藏了顶部摘要信息,那么任务显示区就是唯一的窗口,这些命令依然有效。 -
按下
h或?可以再次调出此帮助界面。 -
按
q或Esc键可以退出帮助并返回top主界面。
2 实际应用%Cpu(s)显示内容

2.1 %CPU各列含义
%Cpu0 : 0.3 us, 2.0 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st %Cpu1 : 0.3 us, 2.7 sy, 0.0 ni, 96.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st %Cpu2 : 0.7 us, 1.7 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st %Cpu3 : 0.0 us, 1.0 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st
这是 top 命令中 CPU 状态行的详细解释。
这一行显示了 CPU 时间的总体使用情况,所有值的百分比总和为 100%。
格式:%Cpu(s): us, sy, ni, id, wa, hi, si, st
各列含义详解
| 缩写 | 全称 | 含义解释 |
|---|---|---|
| us | user | 用户空间进程占用 CPU 的百分比。这是运行普通用户应用程序(非内核程序)所花费的 CPU 时间。如果这个值长期过高,表示用户应用程序消耗了大量 CPU 资源。 |
| sy | system | 内核空间进程占用 CPU 的百分比。这是运行系统内核进程所花费的 CPU 时间。例如,执行系统调用(I/O 操作、进程创建等)。较高的 sy 值可能表示系统在进行大量的内核操作,或者存在频繁的上下文切换。 |
| ni | nice | 被调整过优先级(niced)的用户进程占用 CPU 的百分比。Nice 值允许影响进程的调度优先级。这里的 CPU 时间是指那些被赋予了积极 Nice 值(优先级调低)的进程所消耗的。 |
| id | idle | CPU 空闲时间的百分比。这是 CPU 没有执行任何任务的时间比例。这个值越高,说明 CPU 越空闲。你提供的例子中 id=99.4%,表明系统 CPU 压力非常小。 |
| wa | I/O wait | CPU 等待 I/O 操作完成的时间百分比。当 CPU 需要的数据还在磁盘、网络等慢速设备上读写时,它必须停下来等待。这个值过高通常表示磁盘或网络 I/O 存在瓶颈,成为了系统性能的限制因素。 |
| hi | hardware interrupts | 处理硬件中断所花费的 CPU 时间百分比。硬件中断由硬件设备(如硬盘、网卡、键盘)发出,以通知 CPU 某个事件(如数据已就绪)需要立即处理。 |
| si | software interrupts | 处理软件中断所花费的 CPU 时间百分比。软件中断由软件程序触发,通常用于处理任务调度、系统时钟等。在虚拟化环境中,这也可能包括处理来自其他虚拟机的中断。 |
| st | steal time | 被虚拟化程序(Hypervisor)“偷走”的 CPU 时间百分比。这个指标仅出现在虚拟机和云主机中。它表示你的虚拟机准备运行,但由于 Hypervisor 正在为其他虚拟机(或主机本身)提供服务,你的虚拟机无法获得物理 CPU 时间。如果这个值持续很高,说明你的虚拟机正在和宿主机上的其他虚拟机激烈争夺 CPU 资源,性能会受到影响。 |
如何快速解读?
-
看整体繁忙程度:主要看
id(空闲)。100% - id% = CPU 总使用率。-
你的例子:
100% - 99.4% = 0.6%,CPU 使用率极低,系统非常空闲。
-
-
看瓶颈类型:
-
CPU 瓶颈:如果
us和sy很高,而id很低,说明计算是瓶颈。 -
I/O 瓶颈:如果
wa值很高(例如持续超过 20%),说明存储或网络速度跟不上,CPU 经常在等待。 -
虚拟化环境问题:如果
st值很高,说明物理主机资源不足,你需要联系云服务提供商或系统管理员。
-
-
看中断压力:通常
hi和si的值都很低。如果它们异常高,可能表示有硬件问题或内核驱动存在问题。
2.2 进程号这一行各列的含义
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
这是对 top 命令输出中进程信息各列的详细解释。
| 列标题 | 含义与全称 | 详细解释 |
|---|---|---|
| PID | 进程ID (Process ID) | 操作系统分配给每个进程的唯一标识号。用于指定和管理特定进程(例如用 kill 命令终止进程)。 |
| USER | 用户名 (User Name) | 启动此进程的用户账户名。表明该进程由哪个用户拥有。 |
| PR | 优先级 (Priority) | 进程的调度优先级。由 Linux 内核动态管理,值越小,优先级越高,越容易被调度执行。用户通常无法直接修改。 |
| NI | NICE值 (Nice Value) | 用户可调整的优先级修正值。范围通常为 -20 到 19。负值: 提高优先级(对系统进程不推荐)。0: 默认优先级。正值: 降低优先级(让出 CPU 时间)。您可以使用 r 命令来修改此值。 |
| VIRT | 虚拟内存 (Virtual Memory Size) | 进程占用的总虚拟内存大小。包括进程实际使用的内存、映射的文件、以及共享库等。VIRT = RES + SWAP + 共享库 + ... 这个值可能很大,但不代表实际消耗了那么多物理内存。 |
| RES | 常驻内存 (Resident Memory Size) | 进程当前使用的、未被换出的物理内存大小(单位通常是 KiB 或 MB)。这是判断一个进程真实内存占用的关键指标。RES 是 SHR 的一部分。 |
| SHR | 共享内存 (Shared Memory Size) | RES 中可以被其他进程共享的内存部分。例如,共享库(如 libc.so)只需要在物理内存中加载一次,多个使用它的进程可以共享。 |
| %CPU | CPU 使用率 (CPU Usage) | 进程自上一次更新以来占用 CPU 的时间百分比。在多核系统中,这个值可以超过 100%。例如,一个进程完全占用了 2 个核心,其 %CPU 会显示为 200%。 |
| %MEM | 内存使用率 (Memory Usage) | 进程当前使用的物理内存 (RES) 占系统总物理内存的百分比。这是衡量进程内存占用的另一个直观指标。 |
| TIME+ | CPU 时间 (CPU Time) | 进程自启动以来总共使用的 CPU 时间,精确到百分之一秒。格式为 分:秒.百分秒。与 %CPU(瞬时率)不同,这是累积值。 |
| COMMAND | 命令名/行 (Command) | 启动此进程的命令名称。如果按下 c 键切换后,则会显示完整的命令行及其参数。 |
如何快速解读与应用?
-
找资源消耗大户:
-
按
%CPU排序(按P键):快速找到最耗 CPU 的进程。 -
按
%MEM排序(按M键):快速找到最耗内存的进程。
-
-
判断内存占用:
-
不要只看
VIRT,它很大是正常的。关键看RES,它才是进程实际占用的物理内存。 -
SHR是共享部分,如果多个进程都依赖同一个共享库,这块内存不会被重复计算。
-
-
调整进程优先级:
-
如果你想让某个不重要的大计算量进程跑得慢一点,不影响其他任务,可以用
r命令将其NI值调高(例如设为 10 或 15)。 -
如果你想提高某个进程的优先级(需 root 权限),可以将其
NI值设为负数(例如 -5)。
-
-
识别进程:
-
通过
COMMAND列可以知道某个进程具体是哪个程序。结合USER列可以判断是系统进程还是用户进程。
-
如果一个进程的 RES 很高,同时 %MEM 也很高,说明它是导致系统内存紧张的主要原因。如果它的 %CPU 持续为 100%,说明它正在全力进行计算,可能是导致系统卡顿的元凶。这时你就可以根据 PID 来决定是否要终止 (k) 或调整其优先级 (r)。
Linux 中 htop 可见但 /proc 下无对应线程目录的原因
在 Linux 中,htop 显示的线程确实在 /proc 文件系统中存在,但它们不是以独立文件夹的形式直接出现在 /proc 根目录下。
原因分析
-
线程在
/proc中的组织方式:-
线程信息存储在
/proc/<pid>/task/<tid>/目录中 -
<pid>是进程 ID,<tid>是线程 ID -
主线程的目录直接显示为
/proc/<pid>/(因为主线程的 tid = pid)
-
-
查看线程信息的方法:
# 查找进程ID ps aux | grep <process-name> # 查看该进程的所有线程 ls /proc/<pid>/task/ # 查看特定线程的详细信息 cat /proc/<pid>/task/<tid>/status
示例说明
假设有一个多线程进程(如 Nginx),其进程 ID 为 1234,包含多个线程:
/proc/1234/ # 主线程目录 /proc/1234/task/1234/ # 也是主线程 /proc/1234/task/1235/ # 第一个工作线程 /proc/1234/task/1236/ # 第二个工作线程
额外信息
-
使用
htop时按H键可以显示线程而不是进程 -
使用
ps -eLf命令也可以查看所有线程 -
/proc文件系统是虚拟文件系统,内容在内存中动态生成
这种设计保持了进程与线程的层次关系,避免了 /proc 目录过于杂乱。
2.3 当 top 命令没有以树状结构显示线程或子线程未正确显示时
# 以线程模式启动 top
top -H
# 或者启动后按 H 键切换线程视图
3、实际应用
分析 netstat 输出结果
从您的输出可以看到,有两个与 492 相关的套接字连接:
unix 2 [ ] DGRAM 13492 992/sshd: invt [pri unix 3 [ ] STREAM CONNECTED 8134 492/bash
输出解释
-
第一个连接:
-
类型:UNIX 域数据报套接字 (DGRAM)
-
状态:无特定状态 (
[ ]) -
Inode 号:13492
-
进程:PID 992,进程名为
sshd: invt [pri](SSH 守护进程的一个实例)
-
-
第二个连接:
-
类型:UNIX 域流套接字 (STREAM)
-
状态:已连接 (CONNECTED)
-
Inode 号:8134
-
进程:PID 492,进程名为
bash(一个 Bash shell)
-
进一步查看进程 492 的详细信息
# 查看进程 492 的详细信息
ps -p 492 -f
# 查看进程 492 打开的所有文件描述符(包括套接字)
sudo ls -l /proc/492/fd/
# 查看进程 492 的网络连接情况
sudo lsof -p 492 -i
查看特定 inode 的套接字信息
# 查看 inode 8134 的详细信息(与 bash 进程相关的套接字)
sudo find /proc -inum 8134 2>/dev/null
# 查看 inode 13492 的详细信息(与 sshd 进程相关的套接字)
sudo find /proc -inum 13492 2>/dev/null
使用 ss 命令查看更详细的套接字信息
# 查看所有 UNIX 域套接字
sudo ss -xap
# 筛选与进程 492 相关的套接字
sudo ss -xap | grep 492
# 查看特定 inode 的套接字
sudo ss -xap | grep "13492\|8134"
理解 UNIX 域套接字
UNIX 域套接字是一种进程间通信(IPC)机制,用于在同一台机器上的进程之间通信。它们比网络套接字更高效,因为数据不需要经过网络协议栈。
-
DGRAM:数据报套接字,提供无连接、不可靠的消息传递
-
STREAM:流套接字,提供面向连接的、可靠的字节流通信
在您的输出中,bash 进程 (PID 492) 通过 STREAM 类型的 UNIX 域套接字与另一个进程通信,而 SSH 守护进程 (PID 992) 使用 DGRAM 类型的 UNIX 域套接字。
这些套接字通常用于进程间通信,例如 shell 与终端之间的通信,或者 SSH 客户端与服务器之间的通信。
浙公网安备 33010602011771号