linx top 指令使用
top 命令是 Linux 系统中最常用的实时性能监控工具之一。它提供了一个动态更新的视图,显示系统摘要信息以及当前正在运行的进程及其资源占用情况(CPU、内存、时间等)。
启动 top
直接在终端输入:
bash
top
结果:
bash
top - 08:16:30 up 3:20, 1 user, load average: 1.56, 0.81, 0.58
Tasks: 25 total, 2 running, 23 sleeping, 0 stopped, 0 zombie
%Cpu(s): 56.8 us, 11.5 sy, 0.0 ni, 29.9 id, 0.0 wa, 1.2 hi, 0.7 si, 0.0 st
MiB Mem : 1871.4 total, 901.8 free, 512.0 used, 457.6 buff/cache
MiB Swap: 4096.0 total, 3992.5 free, 103.5 used. 1214.6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
96 root 20 0 1553120 196152 31220 S 1.0 10.2 3:52.88 node
214 root 20 0 3611444 86260 31140 S 0.7 4.5 7:44.04 node
8227 root 20 0 6144 1136 552 S 0.3 0.1 0:33.81 top
top 主界面
top 界面主要分为两部分:
1. 系统摘要信息区 (顶部几行):
bash
top - 08:16:30 up 3:20, 1 user, load average: 1.56, 0.81, 0.58
Tasks: 25 total, 2 running, 23 sleeping, 0 stopped, 0 zombie
%Cpu(s): 56.8 us, 11.5 sy, 0.0 ni, 29.9 id, 0.0 wa, 1.2 hi, 0.7 si, 0.0 st
MiB Mem : 1871.4 total, 901.8 free, 512.0 used, 457.6 buff/cache
MiB Swap: 4096.0 total, 3992.5 free, 103.5 used. 1214.6 avail Mem
- 第一行 (
top标题行):top - HH:MM:SS:当前时间。up DD:hh:mm:系统已运行时间。X users:当前登录的用户数。load average: 1min, 5min, 15min:系统在过去1分钟、5分钟、15分钟的平均负载。理想情况下每个核心应小于1.0,但需结合CPU核心数判断。如有4核CPU,则负载小于4时通常表示不拥挤。
- 第二行 (任务统计行):
Tasks: XXX total:进程总数。X running:正在运行的进程数。XXX sleeping:睡眠(等待事件)的进程数。X stopped:已停止的进程数(通常由信号控制)。X zombie:僵尸进程数(已终止但父进程未读取其退出状态的进程)。非0需关注。
- 第三行 (CPU 状态行):
%Cpu(s)::显示所有CPU的总体使用率或每个核心的使用率(按1键切换)。- 详细字段:
us, user:用户空间进程占用CPU百分比(应用程序)。sy, system:内核空间进程占用CPU百分比(系统调用、中断)。ni, nice:调整过优先级的用户进程占用百分比。id, idle:空闲CPU百分比。wa, iowait:等待I/O操作完成的CPU百分比。高值可能表示I/O瓶颈。hi, hardware interrupt:处理硬件中断占用的CPU。si, software interrupt:处理软件中断占用的CPU。st, steal:在虚拟化环境中,被hypervisor"偷走"用于其他虚拟机的CPU时间。
- 第四/五行 (内存使用行):
- 第四行:物理内存 (Mem)
total:总物理内存大小。free:未被使用的物理内存。used:已使用的物理内存 (通常计算为total - free - buffers/cache)。buff/cache:被内核缓冲区和页面缓存使用的内存。这部分内存通常可以被应用程序快速回收。
- 第五行:交换空间 (Swap)
total:总交换空间大小。free:未被使用的交换空间。used:已使用的交换空间。avail Mem:可用内存估算值free + buffers/cache的大致值。系统可以立即分配给进程使用的内存量。这是判断内存是否紧张的关键指标。
- 第四行:物理内存 (Mem)
进程列表区 动态列出进程信息
bash
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
96 root 20 0 1553120 196152 31220 S 1.0 10.2 3:52.88 node
214 root 20 0 3611444 86260 31140 S 0.7 4.5 7:44.04 node
8227 root 20 0 6144 1136 552 S 0.3 0.1 0:33.81 top
PID:进程ID。USER:进程所有者。PR:进程优先级。NI:Nice值(用户态优先级调整值,范围-20到19,负值表示更高优先级)。VIRT:虚拟内存大小 (KB)。进程占用的虚拟地址空间总量,包括代码、数据、共享库、映射文件、交换出去的部分等。RES:常驻内存大小 (KB) 。进程当前实际使用的、未被交换出去的物理内存。这是进程消耗的实际物理内存量,最关注此列。SHR:共享内存大小 (KB)。该进程与其他进程共享的内存部分(如共享库)。S:进程状态 。R= Running / RunnableS= Sleeping (通常)D= Disk sleep (不可中断休眠,通常等待IO)Z= ZombieT= Stopped (by job control signal)t= Stopped by debugger
%CPU:进程自上次刷新以来占用的CPU百分比 (所有核心之和的百分比)。例如,100%表示该进程完全占用了一个CPU核心。如果是多核系统,可以超过100%。%MEM:进程当前使用的物理内存占总内存的百分比 (RES / total Mem的比值)。TIME+:进程自启动以来消耗的总CPU时间(精确到0.01秒)。COMMAND:启动进程的命令行名称或完整路径(取决c键状态) 。按c键切换显示程序名或完整命令行。
top 交互命令
top 的强大之处在于其丰富的运行时控制命令:
- 排序 (非常重要):
P(默认 ):按%CPU(降序)。M:按%MEM(降序)。T:按TIME+(降序)。N:按PID(升序)。R:切换排序顺序 (升序/降序)。
- 显示切换:
1(数字一):在CPU总体视图和各核心视图之间切换。查看特定核心负载非常有用。t:切换顶部摘要信息区中 Tasks/Cpu/Mem 的图形条显示。m:切换内存区域 (Mem/Swap) 图形条显示。c:切换COMMAND列显示程序名或完整命令行。V:切换到树状视图 (显示进程层次关系)。b:高亮显示正在运行 (R状态) 的进程。
- 进程操作:
k:终止进程。输入PID (或按上下键选中),然后输入信号 (默认15/SIGTERM,强制结束用9/SIGKILL)。r:更改进程优先级 (renice)。输入PID (或按上下键选中),然后输入Nice值 (-20到19)。
- 查找/过滤:
L:按字符串过滤/高亮显示进程 (COMMAND,USER等)。输入字符串后只显示匹配行,高亮匹配项。再按一次退出过滤,再次按退出高亮。u或U:按用户名过滤进程 。u然后输入用户名仅显示该用户进程。U清除用户过滤。o/O:设置高级过滤器 (基于列的复杂条件,例如%CPU>10.0)。语法较复杂,可按?查看帮助,或=清除所有过滤。
- 刷新与退出:
h或?:显示帮助信息。d或s:设置刷新间隔秒数 (默认3秒)。输入新值,如1为1秒刷新一次。W:保存当前配置到~/.toprc。下次启动top时会自动加载这些个性化设置(如列显示、排序等)。q:退出top。<Space>:立即刷新。
- 列管理:
f:进入字段管理界面 。可以选择显示/隐藏哪些列 (*号表示显示),以及更改列的排序顺序 (按>或<移动选中列)。按d或<Space>切换选中列的显示,按s可设置选中列为排序主键 (替代P,M,T快捷键,需按q返回)。按q退出字段管理。F:切换到选择排序字段界面(类似f,但主要关注排序)。
常用指令选项
设置刷新间隔
bash
# top -d [sec]
top -d 1
仅监视指定的进程ID
bash
# top -p PID1[, PID2, ...]
top -p 1234
top -p 1234,1235
监控特定用户进程
bash
# top -u [user]
top -u root
查看特定核心负载
启动 top 后直接按 1,从CPU总体视图 切换 各核心视图。
快速定位CPU瓶颈
启动 top 后直接按 P (大写),看哪个进程占用率高,按 %CPU (降序)。
快速定位内存瓶颈
启动 top 后直接按 M (大写),看哪个进程占用率高,按 %MEM (降序)。
监控特定COMMAND进程
以 bash 作为示例:
- 启动
top后直接按O(大写),进入 筛选条件设置。
bash
%Cpu(s): 2.4 us, 1.5 sy, 0.0 ni, 95.1 id, 0.0 wa, 0.7 hi, 0.2 si, 0.0 st
MiB Mem : 1871.4 total, 166.4 free, 1296.2 used, 408.8 buff/cache
MiB Swap: 4096.0 total, 3992.0 free, 104.0 used. 430.1 avail Mem
add filter #1 (case sensitive) as: [!]FLD?VAL
- 在提示符 Add filter #1 as: [!]FLD?VAL 后输入:
COMMAND=bash,回车确认 。
bash
%Cpu(s): 2.4 us, 1.5 sy, 0.0 ni, 95.1 id, 0.0 wa, 0.7 hi, 0.2 si, 0.0 st
MiB Mem : 1871.4 total, 166.4 free, 1296.2 used, 408.8 buff/cache
MiB Swap: 4096.0 total, 3992.0 free, 104.0 used. 430.1 avail Mem
add filter #1 (case sensitive) as: [!]FLD?VAL COMMAND=bash
- 显示结果
bash
top - 06:30:05 up 6 days, 1:33, 1 user, load average: 0.02, 0.09, 0.12
Tasks: 16 total, 1 running, 15 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 0.7 sy, 0.0 ni, 96.2 id, 0.0 wa, 0.7 hi, 0.2 si, 0.0 st
MiB Mem : 1871.4 total, 114.1 free, 1378.9 used, 378.4 buff/cache
MiB Swap: 4096.0 total, 3992.0 free, 104.0 used. 347.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1284066 root 20 0 4380 2684 1968 S 0.0 0.1 0:00.02 bash
1284189 root 20 0 4380 768 184 S 0.0 0.0 0:00.00 bash