top 命令是 Linux/Unix 系统中一个常用的、动态的、交互式的进程查看工具,它能够实时地监控系统中最活跃的进程,并按 CPU、内存使用情况等进行排序,对于系统管理员和开发者来说,top 是排查性能问题(如 CPU 占用过高、内存泄漏)的首选工具之一。

top 命令的基本使用
基本语法
top [选项]
最简单的用法就是直接在终端输入 top,然后会进入一个全屏的交互式界面。
启动后的界面
启动 top 后,你会看到一个分为两大部分的界面:
- 上半部分(系统概要区):显示了系统的整体运行状态和资源使用情况。
- 下半部分(进程列表区):列出了当前系统中正在运行的各个进程的详细信息。
界面详解
系统概要区
这部分位于屏幕顶部,通常分为几行,我们以一个典型的输出为例来解析:
top - 10:30:15 up 10 days, 2:15, 1 user, load average: 0.45, 0.32, 0.27
Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.3 us, 1.2 sy, 0.0 ni, 92.8 id, 0.3 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 8171484 total, 3241568 free, 2123456 used, 2806460 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used, 4548968 avail Mem
逐行解析:

-
第一行:任务栏信息
top: 当前程序的名称。10:30:15: 当前系统时间。up 10 days, 2:15: 系统已启动运行的时间。1 user: 当前登录系统的用户数。load average: 0.45, 0.32, 0.27: 非常重要! 系统的平均负载。- 这三个数字分别代表过去 1 分钟、5 分钟、15 分钟的平均负载。
- 解读:负载值表示正在运行和等待运行(不可中断状态)的进程总数,对于单核 CPU,负载值大于 1 表示系统已满负荷,对于 N 核 CPU,负载值超过 N 才算高负载,一个 4 核 CPU,1 分钟负载是 5,说明系统已经过载了。
-
第二行:任务统计
Tasks: 125 total: 进程总数。1 running: 正在运行的进程数。124 sleeping: 处于睡眠(等待)状态的进程数。0 stopped: 已停止的进程数。0 zombie: 僵尸进程数。僵尸进程是已经终止但父进程尚未回收其资源的进程,少量存在是正常的,过多则需要关注。
-
第三行:CPU 使用率
%Cpu(s): 显示的是所有 CPU 的整体使用情况。3 us(User space): 用户空间占用 CPU 的百分比,这是应用程序代码在用户空间执行所消耗的 CPU 时间。2 sy(System): 内核空间占用 CPU 的百分比,这是操作系统内核在处理系统调用、硬件中断等所消耗的 CPU 时间。0 ni(Nice): 通过nice值调整过优先级的进程占用 CPU 的百分比。8 id(Idle): CPU 处于空闲状态的时间百分比,如果这个值很高,说明 CPU 很空闲。3 wa(I/O Wait): CPU 等待 I/O(如磁盘读写、网络)操作完成所花费的时间百分比,如果这个值很高,说明 I/O 子系统可能存在瓶颈。0 hi(Hardware IRQ): 处理硬件中断所花费的 CPU 时间。1 si(Software IRQ): 处理软件中断所花费的 CPU 时间。0 st(Steal time): 在虚拟化环境中,虚拟机等待物理 CPU 的时间(被其他虚拟机“偷走”的时间)。
-
第四行:内存信息
(图片来源网络,侵删)KiB Mem: 物理内存信息。total: 总物理内存大小。free: 空闲内存大小。used: 已使用内存大小。buff/cache: 用于 buffers 和 cache 的内存大小。注意:在现代 Linux 系统中,buffers和cache中的内存是可被回收的,当应用程序需要时,系统会立刻释放它们。free + buffers/cache才是真正可用的内存。
-
第五行:交换空间信息
KiB Swap: 交换分区(虚拟内存)信息。total: 总交换空间大小。free: 空闲交换空间大小。used: 已使用交换空间大小。avail Mem: 可用物理内存大小,这个值比free更准确,因为它也包含了可回收的buffers/cache。
进程列表区
这部分显示了各个进程的详细信息,列的含义如下(从左到右):
| 列名 | 含义 |
|---|---|
PID |
进程 ID (Process ID),进程的唯一标识符。 |
USER |
进程所有者的用户名。 |
PR |
进程的优先级 (Priority)。 |
NI |
进程的 nice 值,值越低,优先级越高。 |
VIRT |
进程使用的虚拟内存总量 (Virtual memory size)。 |
RES |
进程使用的、未被换出的物理内存大小 (Resident memory size)。 |
SHR |
进程使用的共享内存大小 (Shared memory size)。 |
S |
进程状态,常见状态有:R (Running), S (Sleeping), D (Uninterruptible Sleep), Z (Zombie), T (Stopped)。 |
%CPU |
进程占用 CPU 的时间百分比。 |
%MEM |
进程占用物理内存的百分比。 |
TIME+ |
进程自启动以来占用的总 CPU 时间。 |
COMMAND |
启动进程的命令或程序名。 |
top 的交互式命令
在 top 界面运行时,你可以按下一些键来执行特定操作,而无需退出 top。
| 键 | 功能 |
|---|---|
q |
退出 top。 |
h 或 |
显示帮助信息。 |
M |
按内存使用率(%MEM)降序排序,大写 M。 |
P |
按 CPU 使用率(%CPU)降序排序,这是默认排序方式。 |
T |
按 CPU 累计时间(TIME+)排序。 |
c |
切换命令名和完整路径,在 COMMAND 列中,显示完整路径或仅显示程序名。 |
m |
切换内存显示单位,在 KiB, MiB, GiB 之间切换。 |
t |
切换 CPU 状态栏显示,显示/隐藏 CPU 各项状态。 |
l |
切换负载平均信息显示,显示/隐藏第一行的负载信息。 |
t |
切换进程和 CPU 状态栏,显示/隐藏进程列表和 CPU 状态栏。 |
s |
修改刷新时间间隔,会提示输入一个新的秒数,默认是 3 秒。 |
k |
终止一个进程,会提示输入要终止的进程 PID 和信号(默认是 15,SIGTERM)。 |
r |
重新设置一个进程的优先级,会提示输入进程 PID 和 nice 值。 |
f |
添加或删除列,进入一个交互式界面,可以选择要显示或隐藏的列。 |
o |
改变列的顺序,可以拖动列来重新排列它们的显示顺序。 |
i |
忽略闲置和僵死进程,在进程列表中不显示它们。 |
Z |
设置颜色,可以为不同的元素设置颜色,使界面更易读。 |
实用技巧与实例
实例 1:找出占用 CPU 最高的进程
这是最常见的用法,直接启动 top,默认就是按 %CPU 排序的,列表最上面的就是最耗 CPU 的进程,如果它不是你期望的程序,可能就有问题了。
top # 按 P 键确保是按 CPU 排序(默认就是)
实例 2:找出占用内存最多的进程
当你感觉系统卡顿,怀疑是内存不足时,这个方法非常有效。
top # 按 M 键,按 %MEM 排序
查看 RES 和 %MEM 列,找出那些占用内存异常高的进程。
实例 3:只查看某个用户的进程
有时你需要排查特定用户的问题。
top -u <username> # top -u nginx
这会只显示 nginx 用户启动的进程。
实例 4:实时监控特定进程
你已经知道了一个有问题的进程的 PID,想持续观察它的状态。
top -p <pid1> -p <pid2> # top -p 1234 -p 5678
这会只显示 PID 为 1234 和 5678 的进程信息。
实例 5:将 top 的结果保存到文件
有时你需要将某个时刻的系统状态保存下来进行分析。
# 使用 -b (batch) 和 -n (number of iterations) 选项 top -b -n 1 > top_output.txt
-b: 以批处理模式运行,不使用交互式界面,适合输出到文件或管道。-n 1: 只刷新一次,然后退出。
top vs. htop
htop 是 top 的一个增强版,在功能性和用户体验上都有很大提升。
| 特性 | top |
htop |
|---|---|---|
| 界面 | 功能单一,信息密集 | 界面美观,彩色显示,更直观 |
| 交互 | 需要记忆按键 | 支持鼠标操作,菜单驱动 |
| 进程操作 | 终止进程 (k) |
可以直接 F9 杀死进程,F7/F8 调整优先级 |
| 树形视图 | 无 | 有 (t 键),可以清晰地看到进程的父子关系,对排查问题非常有帮助 |
| 启动速度 | 快 | 稍慢,但功能强大 |
| 安装 | 通常预装 | 大多数发行版需要手动安装 (sudo apt install htop 或 sudo yum install htop) |
对于日常使用和快速排查问题,htop 是更好的选择,但 top 是系统基础工具,无处不在,了解其工作原理仍然非常重要。
top 命令是 Linux 系统监控的基石,掌握它,你就能快速洞察系统的健康状况:
- 看
load average:判断系统整体负载是否过高。 - 看
%Cpu(s):判断 CPU 是被用户程序 (us)、系统 (sy) 还是 I/O (wa) 占用了。 - 看
Mem和Swap:判断物理内存和交换空间的使用情况。 - 看进程列表:结合排序,快速定位消耗资源最多的元凶进程 (
PID)。
希望这份详细的解析能帮助你更好地理解和使用 top 命令!
