一、命令概述
top 是 Linux 系统中最基础、最强大的实时系统监控工具--2。它能够动态显示系统中各个进程的资源占用情况,包括 CPU 使用率、内存消耗、进程状态等关键指标-。与静态的 ps 命令不同,top 提供的是实时更新的动态视图-2。
top 命令自 1984 年诞生以来,一直是 Linux 管理员评估系统性能、定位资源消耗进程的核心工具-。
基本语法:
bash
top [选项]
直接输入 top 即可启动交互式会话,默认每 3 秒刷新一次数据。
二、输出结果详解
top 的输出分为两大区域:统计信息区 (前 5 行)和进程列表区(第 6 行开始)-。
2.1 统计信息区
第一行:系统运行时间与负载
bash
top - 14:30:45 up 10 days, 3:15, 2 users, load average: 0.15, 0.10, 0.05
-
14:30:45:当前系统时间 -
up 10 days:系统已运行时间 -
2 users:当前登录用户数 -
load average:1 分钟、5 分钟、15 分钟的平均负载
解读要点 :平均负载表示处于可运行状态和不可中断睡眠状态的平均进程数-。关键判断标准:负载值应除以 CPU 核心数来判断是否过载-。如果负载值持续超过 CPU 核心数,说明系统过载。
第二行:任务状态
bash
Tasks: 150 total, 2 running, 148 sleeping, 0 stopped, 0 zombie
-
total:进程总数-3 -
running:正在运行的进程数-3 -
sleeping:休眠进程数 -
stopped:停止的进程数 -
zombie:僵尸进程数------需重点关注 ,非零值可能暗示进程管理问题-2
第三行:CPU 状态
bash
%Cpu(s): 5.3 us, 1.2 sy, 0.0 ni, 93.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.2 st
-
us:用户空间程序占用 CPU 百分比 -
sy:内核空间占用 CPU 百分比 -
ni:调整过优先级的用户进程占用 -
id:空闲 CPU 百分比 -
wa:I/O 等待时间------若持续较高,可能存在磁盘瓶颈 -
hi:硬件中断处理时间 -
si:软件中断处理时间 -
st:被虚拟机偷走的时间
第四/五行:内存与交换分区
bash
MiB Mem : 7982.8 total, 1024.0 free, 4096.0 used, 2862.8 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used
-
total:总内存/交换分区大小 -
free:空闲内存/交换分区 -
used:已使用内存/交换分区 -
buff/cache:缓存和缓冲区占用的内存
⚠️ 重要提示 :在 Linux 中,
free很小不代表内存不够------系统会尽可能利用空闲内存做缓存。真正需要关注的是avail Mem(可用内存),它才反映系统实际可用的内存量。
2.2 进程列表区(关键字段)
| 字段 | 含义 | 说明 |
|---|---|---|
| PID | 进程 ID | 唯一标识符 |
| USER | 进程所有者 | |
| PR | 优先级 | 越小越优先执行 |
| NI | Nice 值 | 进程优先级调整值 |
| VIRT | 虚拟内存 | 进程"需要的"虚拟内存大小,包括库、代码、数据等 |
| RES | 常驻物理内存 | 进程实际占用的物理内存(排障核心指标) |
| SHR | 共享内存 | 与其他进程共享的内存 |
| S | 进程状态 | S=睡眠,R=运行,D=不可中断睡眠,Z=僵尸 |
| %CPU | CPU 使用率 | |
| %MEM | 内存使用率 | |
| TIME+ | 累计 CPU 时间 | |
| COMMAND | 命令名称 |
VIRT、RES、SHR 的关系:
VIRT = SWAP + RES-进程实际独占的物理内存 ≈
RES - SHR-
VIRT很大不一定有问题(如 MySQL 的 InnoDB buffer pool 会映射大量虚拟内存)
三、命令行参数
| 参数 | 说明 | 示例 |
|---|---|---|
-d <秒数> |
设置刷新间隔(默认 3 秒) | top -d 1 |
-p <PID> |
监控指定进程 | top -p 1234 |
-u <用户> |
仅显示特定用户的进程 | top -u root |
-n <次数> |
刷新指定次数后自动退出 | top -n 5 |
-b |
批处理模式,适合脚本输出 | top -b -n 1 |
-H |
显示线程级统计 | top -H |
-i |
忽略闲置/僵尸进程 | top -i |
-c |
显示完整命令路径 | top -c |
四、交互式快捷键(运行 top 时使用)
4.1 排序控制
| 快捷键 | 功能 | 场景 |
|---|---|---|
P (Shift+p) |
按 CPU 使用率排序(默认) | 定位计算密集型进程 |
M (Shift+m) |
按内存使用率排序 | 发现内存泄漏进程 |
T (Shift+t) |
按运行时间排序 | 分析长运行服务 |
N (Shift+n) |
按 PID 排序 | 按进程创建顺序查看 |
R (Shift+r) |
反转排序顺序(升序/降序切换) | --- |
4.2 显示控制
| 快捷键 | 功能 |
|---|---|
1 |
显示所有 CPU 核心的详细使用情况 |
c |
切换显示命令名/完整命令路径 |
E (Shift+e) |
循环切换内存单位(KB/MB/GB) |
f |
进入字段管理界面,自定义显示列 |
W |
保存当前配置到 ~/.toprc 文件 |
V |
以树状结构显示进程关系 |
4.3 进程管理
| 快捷键 | 功能 |
|---|---|
k |
终止进程(需输入 PID) |
r |
调整进程优先级(nice 值) |
u |
按用户筛选进程 |
4.4 其他
| 快捷键 | 功能 |
|---|---|
h 或 ? |
显示帮助 |
q 或 Ctrl+C |
退出 top |
Space |
立即刷新显示 |
五、高级技巧
5.1 字段定制(按 f 进入字段管理)
默认的 top 视图只是冰山一角。按 f 进入字段管理面板后:
-
上下键移动光标选择字段
-
空格键选中/取消显示(左侧出现
*号表示显示) -
q退出并查看定制后的数据
企业级排障推荐开启的字段:
| 场景 | 推荐字段 | 作用 |
|---|---|---|
| 内存泄漏排查 | DATA |
数据段+堆栈大小,持续上涨暗示内存泄漏 |
| Swap 恐慌判断 | SWAP |
被置换到磁盘的内存大小 |
| I/O 瓶颈排查 | WCHAN |
进程休眠的内核函数,如 blk_mq_* 暗示磁盘 I/O 瓶颈 |
| 内存颠簸检测 | nMaj |
主缺页中断次数,疯狂飙升说明物理内存严重不足 |
| 线程风暴排查 | nTH |
进程线程总数,过高说明线程池失控 |
5.2 查看线程级别(按 H)
在主界面按下大写 H,可将进程视图展开为底层线程视图,直接找出占用极高资源的个别线程(TID)-。
5.3 批处理模式用于脚本
bash
# 单次采集,适合脚本
top -b -n 1
# 按内存排序后输出到文件
top -b -o -MEM -n 1 > top_output.txt
批处理模式(-b)会禁用交互特性,输出可解析的文本,推荐用于脚本自动化采集-。
5.4 保存配置
在 top 界面中定制好显示字段后,按 W 即可将当前配置保存到 ~/.toprc,下次启动自动生效。
六、常见误区(90% 的人都会踩的坑)
❌ 误区 1:%CPU 最大只能是 100%
正解 :top 中的 %CPU = 使用的 CPU 核心数 × 100%。一台 16 核机器上,1265% 表示占用了约 12.6 个核心,并非异常。
❌ 误区 2:load average 很高 = CPU 打满了
正解 :load average 表示正在运行 + 等待 CPU 的进程数。必须结合 CPU 核心数判断------16 核机器上 load 为 12 完全可接受。
❌ 误区 3:VIRT 很大 = 内存要炸
正解 :VIRT 是虚拟内存,包含内存映射文件、预留内存等。判断内存是否有问题,看 RES + 系统是否 OOM ,而不是看 VIRT。
❌ 误区 4:free 很小 = 内存不够
正解 :Linux 的内存哲学是"不用白不用"------空闲内存会被用来做缓存。真正要看的是 avail Mem(可用内存)。
❌ 误区 5:top 能直接定位根因
正解 :top 只能告诉你"谁在消耗资源",但无法告诉你"为什么消耗"。需要结合其他工具(如数据库慢查询日志、应用日志等)进一步排查。
七、快速参考卡片
bash
# 基础启动
top # 默认启动,3秒刷新
top -d 1 # 每秒刷新
top -p 1234,5678 # 监控指定进程
top -u root # 只看 root 用户
top -H # 线程视图
# 交互快捷键(运行中)
P # CPU排序(默认)
M # 内存排序
T # 运行时间排序
1 # 查看各核心CPU
c # 显示完整命令
f # 自定义字段
W # 保存配置
q # 退出
# 脚本模式
top -b -n 1 # 单次采集
top -b -o -MEM -n 1 # 按内存排序后单次采集