top 命令介绍
top命令用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个进程的资源占用状况。该命令可以按照CPU的使用、内存的使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式命令进行设定显示。
# 命令详解
# 语法格式:
top [option]
# 常用命令参数:
参数选项 | 说明 |
---|---|
-b | 以批处理模式操作 |
-c | 显示完整的命令路径 |
-d | top默认3秒刷新一次,-d 用于设置界面的刷新间隔时间(以秒为单位),可接受小数。(例:top -d 0.5) |
-i | 隐藏空闲进程,只显示有资源消耗的进程(CPU 使用率非 0),减少屏幕杂乱。 |
-n 次数 | 指定刷新次数后退出。在非交互模式下运行 top,刷新指定次数后自动退出,常用于脚本或日志收集。 |
-p PID[,PID...] | 只显示指定 PID 的进程,适合聚焦某个或某些进程。可监控多进程。 |
-u 用户名 或-u UID | 过滤特定用户的进程,减少无关信息。 |
-o 字段 | 按指定字段排序,启动时指定按某个字段(如 %CPU、 %MEM)排序进程列表。 |
-w [宽度] | 调整输出宽度,适合宽终端或需要更多列信息。 |
# 实际应用场景:
排查高CPU占用:
top -o %CPU
1其他常用字段:%CPU、 %MEM、 TIME、 PID 等。
监控特定用户进程:
top -u sms -c
1
查看用户 sms 的进程,并显示完整命令行。
脚本中收集数据
top -b -n 1 -u root > root_processes.log
1记录 root 用户的进程信息到日志文件,运行一次后退出。
高频监控特定进程:
top -d 0.5 -p 1234
1每 0.5 秒监控 PID 为 1234 的进程状态。
补充:
交互性:许多选项的功能也可以在 top 运行时通过交互键实现。例如,按 u 过滤用户,按 f 调整字段,按 k 杀死进程。
组合使用:选项可以组合使用,但要注意兼容性。例如,-b(批处理模式)不适合交互操作。
性能影响:高频刷新(如 -d 0.1)或监控大量进程可能增加系统负载,需谨慎使用。
# 交互式命令
交互式命令就是在top命令执行过程中使用的一些命令。用户可以通过按键动态调整显示内容、管理进程或更改监控行为。这些交互式命令极大增强了 top 的灵活性,使其成为强大的实时监控工具。以下是 top 的常用交互式命令及其功能介绍:
# 基本操作
q
:退出top
- 功能:结束
top
的运行,返回终端。 - 示例:按
q
后立即退出。
- 功能:结束
h
或?
:显示帮助- 功能:弹出帮助窗口,列出所有可用交互命令及其说明。
- 示例:按
h
,查看命令列表后按q
返回主界面。
空格键
:立即刷新- 功能:不等待默认刷新间隔,手动强制更新一次数据。
- 示例:按 空格,界面立刻刷新。
# 排序与显示调整
Shift + P
:按 CPU 使用率排序- 功能:进程列表按
%CPU
列从高到低排序。 - 示例:按
Shift + P
,快速找到 CPU 占用最高的进程。
- 功能:进程列表按
Shift + M
:按内存使用率排序- 功能:进程列表按
%MEM
列从高到低排序。 - 示例:按
Shift + M
,排查内存占用大的进程。
- 功能:进程列表按
Shift + T
:按累计运行时间排序- 功能:按
TIME+
列排序,显示运行时间最长的进程。 - 示例:按
Shift + T
,查看哪些进程运行时间最久。
- 功能:按
f
:字段管理- 功能:进入字段管理模式,选择显示的列或调整排序字段。
- 操作:
- 按
f
后,用上下箭头选择字段。 - 按
d
切换字段显示/隐藏。 - 按
s
设置排序字段。 - 按
Enter
保存并返回。
- 按
- 示例:按
f
,选中VIRT
,按s
设为排序字段,查看虚拟内存使用量排序。
c
:切换命令行显示模式- 功能:在
COMMAND
列切换显示完整命令行或仅程序名。 - 示例:按
c
,从 python3 切换到 /usr/bin/python3 script.py。
- 功能:在
i
:切换显示空闲进程- 功能:隐藏或显示空闲进程(CPU 使用率为 0 的进程)。
- 示例:按
i
,只显示有资源消耗的进程,再按一次恢复。
1
:切换 CPU 显示模式- 功能:在总 CPU 使用率和每个 CPU 核心的单独使用率之间切换。
- 示例:按
1
,显示每个 CPU 核心的详细使用情况(如 4 核 CPU 会显示 4 行)。
# 进程管理
k:杀死进程
功能:输入 PID 后终止指定进程。
操作:
- 按
k
,提示输入 PID。 - 输入目标进程的 PID(如 1234),回车。
- 默认发送 SIGTERM(15),可输入其他信号编号(如 9 表示 SIGKILL)。
示例:按
k
,输入1234
,终止 PID 为 1234 的进程。- 按
r:调整进程优先级(renice)
- 功能:修改某个进程的 nice 值,影响其调度优先级。
- 操作:
- 按
r
,提示输入 PID。 - 输入 PID 后,再输入新的 nice 值(-20 到 19,负值优先级更高)。
- 按
- 示例:按
r
,输入1234
,再输入-5
,提高 PID 1234 的优先级。 - 注意:需要足够权限(通常 root)才能调高优先级。
# 刷新与过滤
- d 或 s:修改刷新间隔
- 功能:动态调整数据刷新间隔。
- 操作:
- 按 d 或 s,提示输入秒数。
- 输入新间隔(如 1 或 0.5),回车确认。
- 示例:按 d,输入 2,将刷新间隔改为 2 秒。
- u:按用户过滤进程
- 功能:只显示指定用户的进程。
- 操作:
- 按
u
,提示输入用户名。 - 输入用户名(如
root
或留空显示所有),回车。
- 按
- 示例:按
u
,输入alice
,只显示用户alice
的进程。
- n:限制显示进程数量
- 功能:设置显示的最大进程数。
- 操作:
- 按 n,提示输入数量。
- 输入数字(如 10),回车。
- 示例:按 n,输入 5,只显示前 5 个进程。
# 界面调整
- l:切换负载平均值显示
- 功能:显示或隐藏顶部第一行(时间、运行时间、负载平均值)。
- 示例:按 l,隐藏负载信息,再按一次恢复。
- t:切换任务和 CPU 显示
- 功能:显示或隐藏任务统计(Tasks)和 CPU 使用率行。
- 示例:按 t,循环切换显示模式(完整、简略、隐藏)。
- m:切换内存显示
- 功能:显示或隐藏内存和交换分区信息。
- 示例:按 m,循环切换显示模式(完整、简略、隐藏)。
- z:切换彩色显示
- 功能:启用或禁用彩色高亮显示。
- 示例:按 z,界面变为彩色,再按一次恢复黑白。
- Shift + W:保存配置
- 功能:将当前的显示设置(如排序、字段选择)保存到
~/.toprc
文件,下次启动时自动应用。 - 示例:调整好排序和字段后,按
Shift + W
保存。
- 功能:将当前的显示设置(如排序、字段选择)保存到
# 实际应用示例
快速杀掉高 CPU 进程:
- 按 Shift + P 排序,找到 CPU 占用最高的 PID(例如 1234)。
- 按 k,输入 1234,回车终止。
调整刷新并过滤用户:
- 按 d,输入 1,设置 1 秒刷新。
- 按 u,输入 root,只看 root 的进程。
自定义显示字段:
- 按 f,用箭头移到 RES(物理内存),按 d 启用。
- 按 s 将其设为排序字段,Enter 保存。
字段排序(交互)例子:
按 b 和 x,如图:
b
(Bold) - 用于突出显示排序的列 (可以理解为Bold)x
选项会突出显示当前排序的列,使你更容易识别哪个字段正在影响进程的排序。
按 z 和 x,得到下图:
通过
>
或<
可以向右或向左改变排序列>
和<
键提供了一种便捷的方式,在top
运行时动态地切换排序字段,让你能够从不同的角度观察进程的资源使用情况。
# 结果分析
top 命令运行时,其输出分为两部分:上半部分的系统概况和下半部分的进程列表。
# 系统概况
进程列表上方是系统概况,通常有 5 行,内容如下:
- 第一行:系统总体信息
- 示例:top - 14:30:25 up 1 day, 2:15, 3 users, load average: 0.25, 0.30, 0.35
- 含义:
- 14:30:25:当前时间。
- up 1 day, 2:15:系统运行时间(1 天 2 小时 15 分)。
- 3 users:当前登录用户数。
- load average: 0.25, 0.30, 0.35:过去 1、5、15 分钟的系统负载平均值。
- 第二行:任务统计
- 示例:Tasks: 150 total, 2 running, 148 sleeping, 0 stopped, 0 zombie
- 含义:
- 150 total:进程总数。
- 2 running:运行中的进程数。
- 148 sleeping:睡眠中的进程数。
- 0 stopped:停止的进程数。
- 0 zombie:僵尸进程数。
- 第三行:CPU 使用率
- 示例:%Cpu(s): 10.0 us, 5.0 sy, 0.0 ni, 85.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- 含义:
- 10.0 us:用户进程占用 CPU 的百分比。
- 5.0 sy:系统(内核)占用 CPU 的百分比。
- 0.0 ni:低优先级用户进程(nice)占用。
- 85.0 id:空闲 CPU 百分比。
- 0.0 wa:等待 I/O 的 CPU 时间。
- 0.0 hi:硬中断占用。
- 0.0 si:软中断占用。
- 0.0 st:虚拟化偷取时间(若运行在虚拟机中)。
- 第四行:物理内存使用
- 示例:MiB Mem : 8000.0 total, 2000.0 free, 5000.0 used, 1000.0 buff/cache
- 含义:
- 8000.0 total:总物理内存(MB)。
- 2000.0 free:空闲内存。
- 5000.0 used:已用内存。
- 1000.0 buff/cache:缓冲区和缓存占用。
- 第五行:交换分区使用
- 示例:MiB Swap: 2048.0 total, 2048.0 free, 0.0 used
- 含义:
- 2048.0 total:总交换分区大小。
- 2048.0 free:空闲交换空间。
- 0.0 used:已用交换空间。
# 进程列表
以下是默认视图中常见的列,从左到右逐一说明:
PID:进程 ID
- 含义:系统分配给进程的唯一标识号。
- 示例:1234 表示某个进程的 ID。
USER:运行进程的用户
- 含义:启动该进程的用户名或 UID。
- 示例:root、alice。
PR:优先级(Priority)
含义:进程的调度优先级,值越低优先级越高(由内核决定)。
示例:20(普通进程)、0(较高优先级)、rt(实时进程)。
用途:反映进程被 CPU 调度的顺序。
NI:Nice 值
- 含义:用户设置的进程优先级调整值,范围 -20(最高)到 19(最低)。
- 示例:0(默认)、-10(高优先级)。
- 用途:影响 PR,用户可通过 renice 或 r 键调整。
VIRT:虚拟内存使用量(Virtual Memory)
- 含义:进程占用的总虚拟内存(单位通常为 KB),包括代码、数据和共享库。
- 用途:评估进程的内存需求。
RES:物理内存使用量(Resident Memory)
- 含义:进程实际占用的物理内存(未交换到磁盘的部分)。
- 用途:反映进程当前的真实内存占用。
SHR:共享内存使用量(Shared Memory)
- 含义:进程与其他进程共享的内存量(如共享库)。
- 用途:了解内存的共享程度。
S:进程状态(State)
- 含义:当前进程的状态。
- 常见值:
- R:运行中(Running)。
- S:可中断睡眠(Sleeping)。
- D:不可中断睡眠(通常等待 I/O)。
- Z:僵尸进程(Zombie)。
- T:停止(Traced or Stopped)。
- 示例:R 表示进程正在使用 CPU。
- 用途:判断进程是否活跃或异常。
%CPU:CPU 使用率
- 含义:进程占用 CPU 的百分比(相对于单核,100% 表示占满一个核心)。
- 示例:25.0(占用 25% 的 CPU 时间)。
%MEM:内存使用率
- 含义:进程占用物理内存的百分比(相对于系统总内存)。
- 示例:1.5(占总内存的 1.5%)。
TIME+:累计 CPU 时间
- 含义:进程自启动以来累计使用的 CPU 时间(格式通常为 分钟:秒)。
- 示例:10:25(10 分 25 秒)。
- 用途:判断进程运行的持续性和资源消耗。
COMMAND:命令或程序名
- 含义:启动进程的命令或可执行文件名(按 c 可切换为完整命令行)。
# 可选列
通过按 f 键进入字段管理,可以添加或调整更多列,例如:
- PPID:父进程 ID。
- UID:用户 ID。
- GROUP:进程所属用户组。
- SWAP:进程使用的交换分区大小。
- CODE:代码段大小。
- DATA:数据段大小。
提示
top 默认的单位为kb,怎么修改呢?
按下
E
(大写 E): 这会循环切换系统概况区域
的内存单位。 单位会依次变为 KB, MB, GB, TB, PB, EB。按下
e
(小写 e): 这会循环切换进程区域
的内存单位。 同样地,单位会依次变为 KB, MB, GB, TB, PB, EB。
# 其他 ”top“
top 是一个广为人知的进程监控工具,但它并不是唯一的选项。下面这些工具可以看作是 top 的替代品或增强版,通常提供更友好的界面、更详细的数据或不同的使用方式。
htop
简介:htop 是 top 的一个增强版,提供更直观的彩色界面和更方便的交互操作。
特点:
彩色显示,默认按 CPU、内存等高亮。
支持鼠标操作(例如点击选择进程)。
内置搜索(按 F3)和过滤(按 F4)。
可视化进程树(按 F5)。
直接支持杀死进程(按 F9)和调整优先级。
与 top 的区别:界面更友好,操作更直观,默认显示更丰富的信息。
适用场景:日常监控、需要快速操作时。
atop
简介:atop 是一个高级性能监控工具,不仅显示进程,还记录磁盘、网络等资源的使用情况。
特点:
- 支持长期监控,数据可保存到日志文件。
- 显示 CPU、内存、磁盘 I/O、网络 I/O 等详细统计。
- 按时间间隔(如每 10 秒)记录快照。
- 支持回放历史数据(使用 atop -r)。
与 top 的区别:更注重系统资源的全方位分析,适合性能调优和问题排查。
适用场景:需要深入分析系统瓶颈或长期记录数据时。
ps (结合 watch)
简介:ps 不是实时监控工具,但结合 watch 可以实现类似 top 的动态效果。
例如:
watch -n 1 "ps aux --sort=-%cpu"
1-n 1:每 1 秒刷新。
aux:显示所有用户进程。
--sort=-%cpu:按 CPU 使用率降序排序。
btop
简介:btop 是一个现代化的资源监控工具,基于 C++ 开发,提供美观的终端界面。
特点:
类似 htop,但界面更精美,支持主题。
显示 CPU、内存、磁盘、网络的图形化统计。
支持鼠标操作和键盘快捷键。
与 top 的区别:界面更现代化,视觉效果更好。
适用场景:追求美观和直观体验的用户。