top命令

top命令是Linux系统中最常用的性能监控工具之一,用于实时动态查看系统中进程的资源占用情况,包括CPU、内存、负载等关键指标,支持交互式操作,可帮助运维人员快速定位性能瓶颈、排查进程异常问题。其核心特点是“实时性”,默认每3秒刷新一次界面,也可自定义刷新频率。

一、top命令基础使用

1.1 基本语法

# 基础用法:直接执行top,进入实时监控界面
top

# 完整语法
top [选项参数]

1.2 退出方式

在top监控界面中,按下 q 键即可退出实时监控(其他交互式快捷键将在后续介绍)。

二、top界面核心内容解读

执行top命令后,界面分为两大区域:系统整体状态区(前5行)和 进程列表区(剩余部分),以下逐区域详细说明。

2.1 系统整体状态区

top - 14:30:00 up 2 days,  8:15,  2 users,  load average: 0.06, 0.12, 0.10
Tasks: 189 total,   1 running, 188 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.1 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15868.4 total,  12345.6 free,   1890.3 used,   1632.5 buff/cache
MiB Swap:   8192.0 total,   8192.0 free,      0.0 used.  13768.2 avail Mem

第1行:系统运行时间与负载

  • 14:30:00:当前系统时间;
  • up 2 days, 8:15:系统已运行时长(2天8小时15分钟);
  • 2 users:当前登录系统的用户数;
  • load average: 0.06, 0.12, 0.10:系统1分钟、5分钟、15分钟的平均负载(核心指标)。 负载解读:负载值对应系统中“等待CPU调度的进程数”,通常建议负载值不超过CPU核心数(如4核CPU负载≤4为正常);若15分钟负载持续高于核心数,说明系统CPU压力过大。

第2行:进程统计信息

  • 189 total:系统当前总进程数;
  • 1 running:正在运行(占用CPU)的进程数;
  • 188 sleeping:睡眠状态(等待资源,不占用CPU)的进程数;
  • 0 stopped:被暂停的进程数;
  • 0 zombie:僵尸进程数(进程已终止但父进程未回收,需及时清理,避免占用资源)。

第3行:CPU资源占用统计(关键指标)

百分比总和为100%,各项含义如下:

  • 0.3 us:用户空间CPU占用率(应用程序如nginx、mysql等占用的CPU);
  • 0.1 sy:内核空间CPU占用率(系统内核操作如进程调度、内存管理占用的CPU);
  • 0.0 ni:优先级调整过的用户进程CPU占用率;
  • 99.6 id:CPU空闲率(空闲率越低,CPU压力越大,低于20%说明CPU紧张);
  • 0.0 wa:CPU等待I/O的时间占比(等待硬盘、网络等I/O操作,过高说明I/O瓶颈);
  • 0.0 hi:硬件中断占用CPU占比;
  • 0.0 si:软件中断占用CPU占比;
  • 0.0 st:虚拟机被宿主机抢占的CPU占比(仅虚拟机环境有效)。

第4-5行:内存与交换分区(Swap)统计

单位默认为KiB,部分系统可通过快捷键 E 切换单位(KiB/MiB/GiB):

  • total:总内存/交换分区大小;
  • free:完全空闲的内存/交换分区;
  • used:已使用的内存/交换分区;
  • buff/cache:缓冲区(buff)和缓存(cache)占用的内存(可被回收,并非真正“占用”);
  • avail Mem:可实际分配给应用程序的内存大小(含空闲内存+可回收缓存)。

注意:Swap分区被频繁使用(used值持续增长),说明物理内存不足,需排查内存泄漏或扩容。

2.2 进程列表区

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 root      20   0  123456  45678  12345 R   0.3   0.3  10:20.30 nginx
 5678 mysql     20   0  567890 123456  23456 S   0.0   0.8  20:30.50 mysqld

各列含义(核心列重点标注):

  • PID:进程唯一ID(杀进程、管理进程的核心标识);
  • USER:进程所属用户;
  • PR:进程优先级(系统动态调整,用户无法直接修改);
  • NI:进程nice值(优先级调整值,范围-20~19,值越小优先级越高,用户可通过nice/renice命令修改);
  • VIRT:进程虚拟内存大小(含所有内存区域,并非实际占用物理内存);
  • RES:进程实际占用的物理内存大小(核心内存指标,不包含缓存);
  • SHR:进程共享内存大小(与其他进程共享的内存,可被多个进程复用);
  • S:进程状态(R:运行中;S:睡眠;D:不可中断睡眠;Z:僵尸;T:暂停);
  • %CPU:进程占用CPU的百分比(实时更新,按CPU核心数分配,如4核CPU单进程最高可占400%);
  • %MEM:进程占用物理内存的百分比;
  • TIME+:进程累计占用的CPU时间(精确到毫秒);
  • COMMAND:启动进程的命令(含参数,可通过快捷键c显示完整命令)。

三、top交互式快捷键(核心操作)

在top监控界面中,按下对应快捷键可实时调整显示效果、排序方式,无需退出重启,常用快捷键如下:

# 排序相关
P:按%CPU使用率降序排序(默认排序方式,快速定位CPU占用最高进程)
M:按%MEM内存使用率降序排序(定位内存占用大户)
N:按PID进程ID升序/降序排序
T:按TIME+累计CPU时间排序(定位长期占用CPU的进程)

# 显示优化
c:切换显示“精简命令”/“完整命令”(排查进程时建议显示完整命令)
e:切换内存单位(KiB/MiB/GiB,适配不同内存大小的服务器)
E:切换交换分区单位(同e键功能,针对Swap分区)
H:显示/隐藏线程(开启后可查看进程下的单个线程,定位线程级瓶颈)
k:终止指定进程(按下后输入PID,再输入信号量(默认9,强制终止),回车确认)
r:调整进程nice值(按下后输入PID,再输入nice值(-20~19),调整进程优先级)

# 刷新频率
s:自定义刷新频率(按下后输入秒数,默认3秒,最小1秒)

# 其他操作
q:退出top监控界面
f:自定义显示列(可添加/删除进程列表列,如添加PPID父进程ID、UID用户ID等)
o:调整列显示顺序(按对应列的快捷键,调整列的前后位置)

四、top命令常用参数

除交互式使用外,top支持通过参数直接启动并指定显示规则,适合脚本调用或批量监控,常用参数如下:

# 1. 指定刷新频率(-d 秒数)
top -d 5  # 每5秒刷新一次,默认3秒

# 2. 显示指定PID的进程(-p PID1,PID2)
top -p 1234,5678  # 仅监控PID为1234和5678的进程,适合跟踪特定进程

# 3. 显示所有用户的进程(-u 用户名/UID)
top -u mysql  # 仅监控mysql用户启动的所有进程,排查应用进程问题

# 4. 以批处理模式显示(-b,非实时界面,适合输出到文件或脚本)
top -b -n 3 -d 2 > top_log.txt  # 每2秒刷新一次,共刷新3次,结果写入top_log.txt文件
# 说明:-n 次数:指定刷新次数,批处理模式下必须配合-n使用,否则无限刷新

# 5. 显示线程信息(-H,等价于交互式H键)
top -H -p 1234  # 显示PID为1234进程下的所有线程,定位线程级CPU占用问题

# 6. 显示完整命令(-c,等价于交互式c键)
top -c  # 启动后直接显示进程完整命令,无需手动按c键

五、实战场景示例

5.1 定位CPU占用最高的进程

# 方式1:交互式
top  # 启动后默认按%CPU排序,第一行即为CPU占用最高进程
# 若已打乱排序,按下P键重新按CPU降序

# 方式2:非交互式(输出到文件)
top -b -n 1 -c -d 1 | head -20 > cpu_top.txt  # 捕获一次CPU占用前20的进程,含完整命令

5.2 定位内存泄漏进程

top  # 启动后按下M键,按%MEM排序
# 观察RES列和%MEM列,若某个进程的RES值持续增长,无下降趋势,大概率存在内存泄漏

5.3 终止异常高占用进程

top  # 启动后找到异常进程的PID(如PID=1234)
按下k键 → 输入1234 → 输入9(强制终止信号量) → 回车确认
# 说明:信号量9为强制终止,若需优雅终止,可输入15(默认信号量)

六、注意事项

  1. top命令本身会占用少量系统资源(通常≤1% CPU),对系统性能影响可忽略,但若在超负载服务器上使用,建议缩短监控时间或降低刷新频率。
  2. 区分“虚拟内存(VIRT)”和“物理内存(RES)”:VIRT值过大无需担心,重点关注RES值,避免被虚拟内存误导。
  3. 僵尸进程(Z状态)无法通过top的k键终止,需找到其父进程(通过ps -ef | grep 僵尸PID),终止父进程或重启父进程,才能清理僵尸进程。
  4. 多核CPU环境下,%CPU列最大值为“核心数×100%”(如8核CPU单进程最高800%),需结合核心数判断CPU占用是否异常。
  5. 批处理模式(-b)适合脚本自动化监控,若需长期记录进程状态,建议配合crontab定时执行,避免日志过大。
posted @ 2026-01-26 16:49  向闲而过  阅读(2)  评论(0)    收藏  举报