linx top 指令使用

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 的大致值。系统可以立即分配给进程使用的内存量。这是判断内存是否紧张的关键指标

进程列表区 动态列出进程信息

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 / Runnable
    • S = Sleeping (通常)
    • D = Disk sleep (不可中断休眠,通常等待IO)
    • Z = Zombie
    • T = 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 等)。输入字符串后只显示匹配行,高亮匹配项。再按一次退出过滤,再次按退出高亮
    • uU按用户名过滤进程u然后输入用户名仅显示该用户进程。U清除用户过滤。
    • o / O设置高级过滤器 (基于列的复杂条件,例如 %CPU>10.0)。语法较复杂,可按 ? 查看帮助,或 = 清除所有过滤。
  • 刷新与退出:
    • h?:显示帮助信息。
    • ds设置刷新间隔秒数 (默认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 作为示例:

  1. 启动 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 
  1. 在提示符 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
  1. 显示结果
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                                                                                                                                                   
相关推荐
g_i_a_o_giao9 小时前
Android8 从系统启动到用户见到第一个Activity的流程源码分析(三)
android·linux·笔记·学习·安卓framework开发·安卓源码分析
t_hj9 小时前
CentOS 创建站点
linux·运维·centos
从零开始的ops生活10 小时前
【Day 42】Shell-expect和sed
linux·运维·ssh·shell·expect
xx.ii10 小时前
37.Ansible循环+常用过滤器
linux·运维·服务器·ansible
ajassi200010 小时前
开源 C++ QT Widget 开发(九)图表--仪表盘
linux·c++·qt·开源
火山kim10 小时前
一文速通liunx命令
java·linux·运维·服务器
Orchestrator_me11 小时前
centos目录大小查看与清理
linux·运维·centos
huangyuchi.12 小时前
【Linux系统】万字解析,进程间的信号
linux·服务器·信号处理·信号产生·linux信号·信号保存·操作系统如何运行
Johny_Zhao12 小时前
达梦数据库高可用集群部署方案
linux·mysql·网络安全·docker·信息安全·kubernetes·云计算·shell·containerd·达梦数据库·yum源·系统运维·centos8