Linux系统top命令详细指南
目录
1. 基本用法
2. 界面详解
2.1 系统概览区
第一行:系统运行时间与负载
第二行:任务(进程)统计
第三行:CPU 使用率(%Cpu(s))
第四行:物理内存使用(MiB Mem)
第五行:交换分区使用(MiB Swap)
2.2 进程详情区
3. 交互式命令
4. 命令行参数
5. 高级技巧
5.1 高亮运行中进程
5.2 筛选进程
5.3 保存列布局
5.4 内存单位切换
5.5 远程监控
6. 实战案例
6.1 定位高CPU占用进程
6.2 监控内存泄漏
6.3 监控系统负载峰值
6.4 容器内进程监控
7. 替代工具推荐
Top
(Table of Processes)是 Linux 系统中最常用的实时系统监控工具,能够动态显示系统进程的资源占用情况(CPU、内存、磁盘 I/O 等),是排查性能问题的核心工具之一。它类似于 Windows 的“任务管理器”,但功能更强大、更灵活。
1. 基本用法
直接输入 top
命令启动实时监控界面:
top
- 默认每 3 秒刷新一次,按
q
键或Ctrl+C
组合键退出。
2. 界面详解
启动 top
后,界面分为两部分:
2.1 系统概览区
top - 15:12:56 up 64 days, 2:30, 2 users, load average: 0.15, 0.03, 0.08
Tasks: 207 total, 1 running, 206 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.1 us, 2.9 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 1756.0 total, 100.9 free, 1247.7 used, 407.8 buff/cache
MiB Swap: 1024.0 total, 1024.0 free, 0.0 used. 2590.0 avail Mem
-
第一行:系统运行时间与负载
15:12:56
:当前时间up 64 days, 2:30
:系统已运行 64 天 2 小时 30 分钟2 users
:当前登录用户数load average: 0.15, 0.03, 0.08
:1分钟、5分钟、15分钟的系统平均负载- 负载值 ≈ CPU 核心数 表示满载
- 超过核心数表示系统过载
-
第二行:任务(进程)统计
207 total
:总进程数1 running
:正在运行的进程数206 sleeping
:睡眠状态的进程数0 stopped/zombie
:停止或僵尸进程(>0 表示异常)
-
第三行:CPU 使用率(%Cpu(s))
us
:用户进程占用 CPU 百分比(重点关注)sy
:系统(内核)占用 CPU 百分比ni
:调整过优先级(nice)的进程占用id
:空闲 CPU 百分比wa
:I/O 等待占用 CPU 百分比(高表示磁盘瓶颈)hi
:硬件中断si
:软件中断st
:被虚拟机偷走的时间(仅虚拟化环境)
-
第四行:物理内存使用(MiB Mem)
total
:总内存free
:完全空闲内存used
:已使用内存buff/cache
:缓冲区和缓存占用- 注意:Linux 会用空闲内存做缓存,所以
free
小 ≠ 内存不足
-
第五行:交换分区使用(MiB Swap)
used > 0
表示物理内存不足,开始使用 Swap(应尽量避免)avail Mem
:可用内存(包括可回收的缓存)
2.2 进程详情区
列名 | 说明 |
---|---|
PID | 进程 ID |
PPID | 父进程ID |
USER | 运行进程的用户 |
PR | 优先级(Priority) |
NI | nice 值(负值优先级高,正值低) |
VIRT | 虚拟内存使用量(KB/MB/GB) |
RES | 常驻内存使用量(实际物理内存,重点关注) |
SHR | 共享内存大小 |
S | 进程状态:<br>R =运行, S =睡眠, D =不可中断睡眠(I/O), Z =僵尸, T =停止 |
%CPU | CPU 使用率(可能超过 100%,多核) |
%MEM | 内存使用百分比 |
TIME+ | 进程累计 CPU 时间(百分之一秒) |
COMMAND | 命令名或命令行 |
3. 交互式命令
快捷键 | 功能说明 |
---|---|
| 按CPU使用率排序(默认) |
| 按内存使用率排序 |
| 按累计CPU时间排序 |
N | 按 PID 排序 |
d或s | 修改刷新间隔 |
| 终止进程(输入PID后选择信号,如 |
| 调整进程优先级( |
| (数字1)显示多核CPU负载(按逻辑CPU分列) |
| 过滤指定用户的进程(如 |
| 显示完整命令行(默认仅显示命令名) |
l | 开启/关闭负载信息显示 |
m | 开启/关闭内存信息显示 |
| 自定义显示字段(添加/删除列,如添加 |
| 切换彩色显示 |
4. 命令行参数
top -d 6 # 设置刷新间隔为6秒
top -p 8888 # 监控指定PID(可多个: -p 999,888)
top -u nginx # 只显示某用户的进程
top -n 3 # 刷新3次后自动退出
top -b -n 1 > top.log # 批处理模式(输出到文件)
top -H -p 6789 # 显示特定进程的所有线程
top -o %MEM # 按内存排序,发现 Java 进程 RES 持续增长,结合 `jstat` 检查堆内存
5. 高级技巧
5.1 高亮运行中进程
按 b
开启/关闭粗体显示(运行状态进程)
5.2 筛选进程
按 o
后输入条件(如 COMMAND=java
过滤Java进程)
5.3 保存列布局
按 f
选择字段 → 按 s
保存配置
5.4 内存单位切换
启动时加 -E
(如 top -E m
显示MB,-E g
显示GB)
5.5 远程监控
ssh user@remote_host "top -b -n 1 -o %CPU" # 远程执行单次top并返回结果
ssh -t user@remote_host "htop" # 需远程安装htop,交互式远程监控
6. 实战案例
6.1 定位高CPU占用进程
- 执行
top
,观察%CPU
列。 - 输入
P
确保按CPU排序,确认高占用进程。 - 输入
k
,根据提示输入PID,尝试终止进程(若为异常进程)。
6.2 监控内存泄漏
- 执行
top
,观察%MEM
列。 - 输入
M
按内存排序,确认内存占用持续上升的进程。 - 使用
pmap <PID>
或编程语言自带的内存分析工具进一步诊断。
6.3 监控系统负载峰值
- 执行
top -d 1 -n 60
,每1秒刷新一次,持续监控60次。 - 观察平均负载(
load average
)是否超过CPU核心数。 - 结合CPU使用率中的
wa
值,判断是否为I/O瓶颈或计算密集型任务导致。
6.4 容器内进程监控
# 使用容器短ID获取完整ID
docker inspect --format='{{.Id}}' <短ID或名称># 容器内进程监控
top -p $(cat /sys/fs/cgroup/pids/docker/$(docker inspect --format='{{.Id}}' <短ID或名称> )/tasks | paste -sd,)
7. 替代工具推荐
-
htop:交互更强(支持鼠标操作)
-
atop:记录历史资源数据(持久化监控工具)
-
btop:支持更多插件和自定义指标
-
glances:跨平台监控工具
-
nmon:专业级性能监控