目录

top 命令使用详细总结

top命令使用详细总结

top 是 Linux/Unix 系统中实时动态监控系统资源与进程状态的核心工具,相当于 Windows 系统的任务管理器,是运维、开发人员排查系统性能问题的首选工具。它默认每3秒刷新一次数据,支持丰富的排序、筛选、自定义配置与进程管理能力。

一、基础语法与启动

基础语法

top [选项]
  • 最简启动:终端直接输入 top 回车即可进入监控界面
  • 退出方式:按 q 键,或使用 Ctrl+C 强制退出

二、监控界面全字段详解

top 界面分为两大核心区域:系统概览区(前5行)进程列表区,所有字段的含义如下:

2.1 系统概览区(全局资源状态)

第1行:系统基础信息与平均负载

top - 23:10:30 up 12 days,  4:25,  2 users,  load average: 0.68, 0.75, 0.82
字段 含义说明
23:10:30 当前系统时间
up 12 days, 4:25 系统连续运行时长(天、时、分)
2 users 当前登录系统的用户数
load average: 0.68, 0.75, 0.82 系统过去1分钟、5分钟、15分钟的平均负载;单核CPU满负载为1.00,N核CPU满负载为N.00,负载长期超过核心数70%需警惕

第2行:进程(Tasks)统计

Tasks: 201 total,   1 running, 200 sleeping,   0 stopped,   0 zombie
字段 含义说明
total 系统总进程数
running 正在运行的进程数
sleeping 睡眠状态的进程数(大部分进程默认状态)
stopped 停止状态的进程数
zombie 僵尸进程数,数值持续大于0需排查父进程回收逻辑

第3行:CPU 使用率状态(核心重点)

%Cpu(s):  3.2 us,  1.0 sy,  0.0 ni, 95.1 id,  0.5 wa,  0.1 hi,  0.1 si,  0.0 st
字段 含义说明
us 用户态进程占用CPU百分比(业务程序占用,高占用优先排查)
sy 内核态进程占用CPU百分比(系统调用、内核操作占用)
ni 调整过nice值的进程占用CPU百分比
id 空闲CPU百分比,数值越低CPU负载越高
wa CPU等待IO完成的时间百分比,数值高说明磁盘/网络IO存在瓶颈
hi 硬中断占用CPU百分比
si 软中断占用CPU百分比
st 虚拟化环境中被宿主机抢占的CPU时间百分比

第4行:物理内存(Mem)状态

KiB Mem :  8191408 total,  1256320 free,  3215488 used,  3719600 buff/cache
字段 含义说明
total 物理内存总大小
free 完全未使用的空闲内存
used 已使用的物理内存(含进程、内核、共享内存占用)
buff/cache 缓冲区+页缓存内存,系统用空闲内存做的性能优化,进程需要时可快速释放
avail Mem 真正可分配给新进程的可用内存(含free + 可回收的cache),比free更能反映真实内存余量

第5行:交换分区(Swap)状态

KiB Swap:  4194300 total,  4194300 free,        0 used.  3567890 avail Mem
字段 含义说明
total 交换分区总大小
free 空闲交换分区大小
used 已使用的交换分区大小,持续升高说明物理内存不足
avail Mem 交换分区中可用于分配的内存

2.2 进程列表区(单进程资源详情)

默认显示的核心列含义如下,可自定义增减列:

列名 含义说明
PID 进程唯一ID号,用于进程管理、过滤
USER 运行该进程的所属用户
PR 进程内核调度优先级,数值越小优先级越高,默认PR=NI+20
NI 进程Nice值,用户可调整的优先级,范围-20~19,负值提升优先级,正值降低优先级
VIRT 进程占用的虚拟内存总量(含进程代码、数据、共享库、交换空间、堆/栈等),不代表实际物理内存占用
RES 进程常驻物理内存大小(进程当前实际在物理内存中占用的空间,不含交换出去的部分),是判断进程内存占用的核心指标
SHR 进程共享内存大小(含与其他进程共享的共享库、共享内存段)
S 进程状态,常见值:R=运行、S=睡眠、D=不可中断睡眠、T=停止、Z=僵尸进程
%CPU 上一个刷新周期内进程占用CPU的百分比,多核系统中可超过100%(100%代表占满1个逻辑核心,N核CPU最大值为N*100%)
%MEM 进程占用的物理内存占总内存的百分比
TIME+ 进程自启动以来累计使用的CPU时间,精确到百分之一秒
COMMAND 进程启动的命令名/完整命令行

三、常用启动参数

启动top时可携带参数,直接指定监控规则,高频参数如下:

参数 功能说明 实用示例
-d 秒数 设置界面刷新间隔(默认3秒),支持小数 top -d 1 每秒刷新1次;top -d 0.5 每500毫秒刷新1次
-n 次数 刷新指定次数后自动退出top top -n 5 刷新5次后退出,适合单次采集数据
-p PID 仅监控指定PID的进程,支持多个PID逗号分隔 top -p 1234 监控PID1234;top -p 1234,5678 监控两个进程
-u 用户名 仅显示指定用户的进程 top -u root 只看root用户的进程;top -u mysql 只看mysql进程
-b 批处理模式,输出不刷新覆盖,适合写入文件/脚本调用 top -b -n 10 > top.log 将10次刷新结果写入日志
-c 启动时直接显示进程完整命令行(默认仅显示命令名) top -c
-i 启动时隐藏空闲/无资源消耗的进程,只显示活跃进程 top -i
-H 启动线程视图,显示所有线程而非仅进程,排查多线程程序CPU占用必备 top -H -p 1234 查看PID1234进程的所有线程资源占用
-S 开启CPU时间累积模式,将已退出子进程的CPU时间累计到父进程 top -S

四、高频交互快捷键

top运行过程中,可通过单键快捷键实时调整监控视图、执行操作,无需退出重启,按功能分类如下:

4.1 排序类(核心高频)

快捷键 功能说明
P 按%CPU使用率降序排序(默认排序规则)
M 按%MEM内存使用率降序排序,快速定位内存占用大户
T 按累计CPU时间TIME+降序排序
N 按PID号降序排序
R 切换排序方向(升序/降序)
x 高亮显示当前排序的列

4.2 视图切换类

快捷键 功能说明
1(数字1) 切换CPU总览/单个逻辑核心的CPU状态,排查多核负载不均问题
c 切换显示进程命令名/完整命令行
l 开启/关闭第一行负载信息显示
m 切换内存信息显示模式(数值/进度条)
t 切换CPU/进程状态显示模式(数值/进度条)
V 切换进程树视图,直观显示父子进程关系
f 进入字段编辑界面,可添加/删除/排序进程列表的显示列

4.3 筛选过滤类

快捷键 功能说明
u 输入用户名,仅显示该用户的进程,回车清空显示所有用户
U 同u,支持按有效用户/真实用户过滤
i 切换是否隐藏空闲/僵死进程
L 输入关键词,高亮匹配的进程

4.4 进程操作类

快捷键 功能说明
k 终止进程,输入k后按提示输入PID,再输入信号(默认15优雅终止,9强制终止)
r 调整进程nice值,输入r后按提示输入PID,再输入nice值(负值需root权限)

4.5 配置与其他类

快捷键 功能说明
d / s 修改界面刷新间隔,输入新的秒数回车即可
W 将当前top的配置(排序、显示列、刷新间隔等)写入~/.toprc文件,下次启动自动生效
h / ? 打开top帮助界面,查看所有快捷键说明
Ctrl+L 刷新整个屏幕,重置显示界面
q 退出top

五、高级用法与实战技巧

5.1 自定义显示列并永久保存

  1. 运行top,按 f 进入字段编辑界面
  2. 上下方向键选择字段,按空格勾选/取消显示
  3. 左右方向键选择字段,按s设置为排序列
  4. 按q退出编辑界面,按 W 保存配置到~/.toprc,永久生效

5.2 线程级CPU占用排查

多线程程序(如Java、Go服务)CPU飙高时,需定位到具体异常线程:

# 方式1:启动时直接开启线程视图
top -H -p 进程PID

# 方式2:运行中切换线程视图
top -p 进程PID → 运行中按大写H

获取异常线程PID后,可转换为16进制,结合jstack等工具定位代码堆栈。

5.3 脚本化采集监控数据

通过批处理模式,可将top数据写入文件,用于后续分析或告警:

# 每秒采集1次,共采集60次,写入top_monitor.log
top -b -d 1 -n 60 > top_monitor.log

# 定时采集特定进程的资源占用,追加到日志
*/1 * * * * /usr/bin/top -b -n 1 -p 1234 >> /var/log/process_top.log

六、常见认知误区纠正

  1. %CPU超过100%是异常:错误。top的%CPU是单核维度,8核服务器中,进程%CPU最高可达800%,超过100%仅代表进程使用了多核并行计算,是正常现象。
  2. load average高 = CPU满负载:错误。load average是「等待CPU运行的进程数 + 不可中断睡眠的进程数」,IO瓶颈(wa高)会导致load飙升,但CPU idle可能仍很高。
  3. free内存很小 = 内存不足:错误。Linux会用空闲内存做buff/cache优化性能,free小不代表内存不够,核心看avail Mem,只要avail Mem充足,就无需担心。
  4. VIRT内存很大 = 内存泄漏:错误。VIRT包含虚拟内存、共享库、映射文件等,不代表实际物理内存占用,判断内存泄漏核心看RES常驻内存是否持续无节制上涨。
  5. wa高是CPU性能问题:错误。wa是CPU等待IO的时间,数值高说明磁盘读写、网络IO存在瓶颈,需排查磁盘性能、数据库慢查询、大文件读写等,而非优化CPU。

七、典型性能问题排查流程

  1. CPU飙高排查
    • 执行top,按 P 按CPU排序,定位占用最高的进程PID
    • 1 查看是否单核负载不均,按 H 切换线程视图,定位异常线程PID
    • 查看us/sy占比,us高排查业务代码,sy高排查系统调用、频繁创建进程/线程
  2. 内存泄漏排查
    • 执行top,按 M 按内存排序,定位RES持续上涨的进程
    • 关注%MEM、RES是否持续升高,swap used是否持续增长
    • 结合smem、jmap等工具进一步分析进程内存分布
  3. 系统卡顿排查
    • 先看load average,对比1/5/15分钟趋势,判断负载是突发还是持续
    • 看CPU的wa占比,wa高结合iostat排查磁盘IO瓶颈
    • 看%idle,idle持续接近0说明CPU资源耗尽
  4. 僵尸进程排查
    • 查看Tasks行的zombie数值,大于0则存在僵尸进程
    • f 勾选PPID列,找到僵尸进程的父进程PID
    • 排查父进程是否未正确执行wait()回收子进程资源,或重启父进程解决