top命令
top命令
top
命令提供运行系统的动态实时视图,其可以显示系统摘要信息,以及当前由内核管理的进程或线程的列表,显示的系统摘要信息的类型以及为任务显示的信息的类型、顺序和大小都是用户可配置的。
语法#
top -hv | -bcHisS -d delay -n limit -u|U user | -p pid -w [cols]
参数#
-h
: 输出帮助信息。-v
: 输出版本信息。-b
: 以批处理模式启动top
,这对于从top
向其他程序或文件发送输出很有用,在这种模式下,top
将不接受输入并运行,直到您使用'-n
'命令行选项设置了迭代次数限制或终止为止。-c
: 以倒转最后一个记忆中的c
状态开始,因此如果top
显示命令行,那么现在该字段将显示程序名,反之亦然。-d interval
: 指定屏幕更新之间的延迟,并覆盖个人配置文件中的相应值或启动默认值,启动后也可以使用d
或s
交互命令更改。-H
: 指示top
显示各个线程,如果没有此命令行选项,则显示每个进程中所有线程的总和,启动后可以使用H
交互命令更改。-i
: 空闲进程切换,以倒转最后一个记忆中的i
状态开始,关闭此切换时,将不显示自上次更新以来未使用任何CPU
的任务。-n limit
: 指定top
在结束前应产生的最大迭代次数或帧数。-o
: 指定将对任务进行排序的字段的名称,与配置文件中反映的内容无关,您可以在字段名前面加上+
或-
,以覆盖排序方向,前导+
将强制从高到低排序,而-
将确保从低到高排序,此选项主要用于支持自动脚本化批处理模式操作。-O
: 此选项作为上述-o
选项的帮助形式,它将使top
在单独的一行中打印每个可用的字段名,然后退出。-p pid
: 仅监视具有指定进程ID
的进程,此选项最多可以给予20
次,也可以提供一个逗号分隔的列表,其中最多包含20
个PID
,允许两种方法混合使用,pid
值为零将被视为top
程序运行时的进程id
,这只是一个命令行选项,如果您希望返回正常操作,则无需退出并重新启动top
,只需发出以下任何交互式命令=
、u
或U
,对于p
、u
和U
命令行选项是互斥的。-s
: 安全模式操作,以强制的安全模式启动top
,即使对于root
也是如此,通过系统配置文件可以更好地控制此模式。-S
: 累计时间切换,以倒转最后一个记忆中的S
状态开始,当累计时间模式打开时,每个进程都会列出它及其子进程使用的cpu
时间。-u user-id-or-name, -U user-id-or-name
: 仅显示用户id
或用户名与给定进程匹配的进程,-u
选项匹配有效用户,而-U
选项匹配任何用户real
、effective
、saved
或filesystem
,在感叹号!
前面加上前缀用户id
或名称指示top
仅显示用户与提供的进程不匹配的进程,p
、u
和U
命令行选项是互斥的。-w number
: 在批处理模式下,如果没有参数,top
将使用COLUMNS=
和LINES=
环境变量(如果设置)格式化输出,否则,宽度将固定在最大512
列,通过一个参数,可以减少或增加输出宽度(最多512
行),但行数被认为是无限的,在正常显示模式下,如果没有参数,top
将尝试使用COLUMNS=
和LINES=
环境变量(如果设置)格式化输出,对于参数,输出宽度只能减小,不能增大,无论是使用环境变量还是带有-w
的参数,当不处于批处理模式时,都不能超过实际的终端维度,注意如果不使用此命令行选项,输出宽度始终基于调用top
的终端,无论是否处于批处理模式。
操作#
以下启动默认值操作假定没有相关配置文件,即没有用户自定义,此外带星号*
的项目可以通过命令行覆盖。
^Z
: 挂起。fg
: 恢复挂起的命令。<Left>
: 强制屏幕重绘。A
: 交叉显示,默认全屏显示。d
:*
延迟时间,默认为3s
。H
:*
线程模式,默认关闭。I
:Irix
模式,默认开启。p
:*
监控PID
,默认显示所有进程。1
: 查看服务器的cpu
逻辑数。M
: 根据驻留内存大小进行排序。P
: 根据CPU
使用百分比大小进行排序。T
: 根据时间/
累计时间进行排序。c
: 切换显示命令名称和完整命令行。t
: 切换显示进程和CPU
信息。m
: 切换显示内存信息。l
: 切换显示平均负载和启动时间信息 。o
: 改变显示项目的顺序。f
: 从当前显示中添加或删除列项目。S
: 切换到累计模式。s
: 改变两次刷新之间的延迟时间,系统将提示用户输入新的时间,单位为s
,如果有小数,就换算成ms
。q
: 退出top
命令。i
: 忽略闲置和僵尸进程。k
: 终止一个进程。
相关信息#
概览#
total
: 进程总数。running
: 正在运行的进程数。sleeping
: 睡眠的进程数。stopped
: 停止的进程数。zombie
: 僵尸进程数。
CPU信息#
us
: 用户空间占用CPU
百分比。sy
: 内核空间占用CPU
百分比。ni
: 用户进程空间内改变过优先级的进程占用CPU
百分比。id
: 空闲CPU
百分比。wa
: 等待输入输出的CPU
时间百分比。hi
: 硬件CPU
中断占用百分比。si
: 软中断占用百分比。st:
虚拟机占用百分比。
列字段#
可以使用f
交互命令自定义列的位置及其是否可显示。
%CPU
:CPU Usage
,CPU
使用率,任务自上次屏幕更新以来占用的CPU
时间份额,表示为总CPU
时间的百分比,在真正的SMP
环境中,如果一个进程是多线程的,并且top
不是以线程模式运行的,那么可能会报告大于100%
的数量,您可以使用H
交互命令切换线程模式,同样对于多处理器环境,如果Irixmode
处于关闭状态,top
将在Solarismode
下运行,其中任务的cpu
使用量将除以cpu
总数,您可以使用I
交互命令切换Irix/Solaris
模式。%MEM
:Memory Usage (RES)
,内存使用情况,任务当前使用的可用物理内存共享。CGROUPS
:Control Groups
,控制组,流程所属的控制组的名称,如果不适用于该流程,则为-
,控制组用于在安装定义的进程组之间分配资源(cpu
、内存、网络带宽等),它们支持对这些资源的分配、拒绝、优先排序、管理和监视进行细粒度控制,一个系统上可以同时存在许多不同的cgroup
层次结构,并且每个层次结构都连接到一个或多个子系统,子系统表示单个资源,注意: CGROUPS
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断。CODE
:Code Size (KiB)
,代码大小KiB
,用于可执行代码的物理内存量,也称为文本驻留集大小或TRS
。COMMAND
:Command Name or Command Line
,命令名或命令行,显示用于启动任务的命令行或关联程序的名称,您可以使用c
在命令行和名称之间切换,这既是一个命令行选项,也是一个交互式命令,当您选择显示命令行时,没有命令行的进程(如内核线程)将只显示程序名,此字段也可能受视图显示模式的影响,注意COMMAND
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断,当显示命令行时,此字段尤其如此。DATA
:Data + Stack Size (KiB)
,用于可执行代码以外的物理内存量,也称为数据驻留集大小或DRS
。ENVIRON
:Environment variables
,显示各个进程看到的所有环境变量(如果有),这些变量将以原始的本机顺序显示,而不是您习惯于用非限定的set
看到的排序顺序,注意ENVIRON
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断。Flags
:Task Flags
,此列表示任务的当前调度标志,这些标志以十六进制表示,并且不包含零,这些标志正式记录在<linux/sched.h>
中。GID
:Group Id
,有效组ID
。GROUP
:Group Name
,有效组名。NI
:Nice Value
,负的nice
值意味着更高的优先级,而正的nice
值意味着更低的优先级,此字段中的零表示在确定任务的调度能力时不会调整优先级。P
:Last used CPU (SMP)
,表示最后使用的处理器的数字,在真正的SMP
环境中,这可能会频繁更改,因为内核有意使用弱关联,另外,运行top
的行为可能会破坏这种弱关联,并导致更多进程更频繁地更改cpu
(因为对cpu
时间的额外需求)。PGRP
:Process Group Id
,每个进程都是唯一进程组的成员,该进程组用于分配信号,并由终端对其输入和输出请求进行仲裁,创建(fork
)流程时,它将成为其父流程组的成员,按照约定,该值等于流程组的第一个成员(称为流程组长)的流程ID
。PID
:Process Id
,任务的唯一进程ID
,它定期包装,但从不在零重新启动,在内核中,它是一个由task_struct
定义的可调度实体,此值还可用作:
进程组ID
、会话负责人的会话ID
、线程组负责人的线程组ID
、进程组负责人的TTY
进程组ID
。PPID
:Parent Process Id
,任务父进程的进程ID
(pid
)。PR
:Priority
,任务的调度优先级,如果在该字段中看到rt
,则表示任务正在实时调度优先级下运行,在linux
下,实时优先级有些误导,因为传统上操作本身是不可抢占的,虽然2.6
内核可以被大部分抢占,但并不总是这样。RES
:Resident Memory Size (KiB)
,任务使用的非交换物理内存。RUID
:Real User Id
,真实用户ID
。RUSER
:Real User Name
,真实的用户名。S
:Process Status
,任务的状态,可以是:D
不间断睡眠、R
运行、S
睡眠、T
跟踪或停止、Z
僵尸,显示为正在运行的任务应该更恰当地被认为是准备运行的——它们的任务结构只在Linux
运行队列中表示,即使没有真正的SMP
机器,根据top
的延迟间隔和nice
值,也可能会看到许多处于这种状态的任务。SHR
:Shared Memory Size (KiB)
,一个任务可用的共享内存量,通常不是所有的内存都是驻留的,它只是反映了可能与其他进程共享的内存。SID
:Session Id
,会话是进程组的集合,通常由登录shell
建立,新fork
的进程加入其创建者的会话,按照惯例,这个值等于会话的第一个成员的进程ID
,称为会话头,通常是登录shell
。SUID
:Saved User Id
,保存的用户ID
。SUPGIDS
:Supplementary Group IDs
,建立的或从任务父级继承的任何补充组的ID
,它们以逗号分隔的列表显示,注意SUPGIDS
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断。SUPGRPS
:Supplementary Group Names
,登录时建立的或从任务父级继承的任何补充组的名称,它们以逗号分隔的列表显示,注意: SUPGRPS
字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度(最多512
个字符),即便如此,这种可变宽度的字段仍然会受到截断。SUSER
:Saved User Name
,保存的用户名。SWAP
:Swapped Size (KiB)
,任务地址空间的非驻留部分。TGID
:Thread Group Id
,任务所属的线程组的ID
,它是线程组负责人的PID
,在内核术语中,它表示那些共享mm_struct
的任务。TIME
:CPU Time
,任务自启动以来使用的总CPU
时间,当累积模式打开时,每个进程都会列出它及其子进程使用的cpu
时间,使用S
切换累积模式,这既是命令行选项,也是交互式命令,有关此模式的其他信息,请参阅S
交互命令。TIME+
:CPU Time, hundredths
,与Time
相同,但通过百分之一秒反映出更多的粒度。TPGID
:Tty Process Group Id
,连接的tty
的前台进程的进程组ID
,如果进程未连接到终端,则为-1
,按照惯例,此值等于流程组长的流程ID
。TTY
:Controlling Tty
,控制终端的名称,这通常是启动进程的设备(串口、pty
等),并用于输入或输出,但是,任务不需要与终端相关联,在这种情况下,您将看到?
显示。UID
:User Id
,任务所有者的有效用户ID
。USED
:Memory in Use (KiB)
,此字段表示任务已使用的非交换物理内存(RES
)加上其地址空间(SWAP
)的非驻留部分。USER
:User Name
,任务所有者的有效用户名。VIRT
:Virtual Memory Size (KiB)
,任务使用的虚拟内存总量。它包括所有代码、数据和共享库,以及已调出的页面和已映射但未使用的页面。WCHAN
:Sleeping in Function
,取决于内核链接映射的可用性系统地图),此字段将显示任务当前休眠的内核函数的名称或地址,正在运行的任务将在此列中显示一个破折号-
,通过显示此字段,top
自己的工作集可以增加700Kb
以上,具体取决于内核版本,如果发生这种情况,减少开销的唯一方法就是停止并重新启动top
。nDRT
:Dirty Pages Count
,自上次写入辅助存储器以来已修改的页数,dirty pages
必须先写入辅助存储器,然后才能将相应的物理内存位置用于其他虚拟页。nMaj
:Major Page Fault Count
,任务发生的主要页错误数,当进程试图读取或写入其地址空间中当前不存在的虚拟页时,会发生页错误,一个主要的页面错误是当辅助存储访问涉及到使该页面可用时。nMin
:Minor Page Fault count
,任务发生的次要页面错误数,当进程试图读取或写入其地址空间中当前不存在的虚拟页时,会发生页错误,在使该页可用时,较小的页错误不涉及辅助存储器访问。nTH
:Number of Threads
,与进程关联的线程数。nsIPC
:IPC namespace
,用于隔离进程间通信(IPC
)资源(如SystemVIPC
对象和POSIX
消息队列)的命名空间的Inode
。nsMNT
:MNT namespace
,命名空间的Inode
,用于隔离文件系统装入点,从而提供文件系统层次结构的不同视图。nsNET
:NET namespace
,命名空间的Inode
,用于隔离网络设备、IP
地址、IP
路由、端口号等资源。nsPID
:PID namespace
,命名空间的Inode
,用于隔离进程ID
号,这意味着它们不必保持唯一,因此,每个这样的名称空间都可以有自己的init
(PID#1
)来管理各种初始化任务并获取孤立的子进程。nsUSER
:USER namespace
,用于隔离用户和组ID
号的命名空间的Inode
,因此,一个进程可以在用户名称空间外有一个普通的未授权用户ID
,而在该名称空间内有一个具有完全根权限的用户ID0
。nsUTS
:UTS namespace
,用于隔离主机名和NIS
域名的命名空间的Inode, UTS
的意思是UNIX
分时系统。vMj
:Major Page Fault Count Delta
,自上次更新以来发生的主要页错误数。vMn
:Minor Page Fault Count Delta
,自上次更新以来发生的次要页面错误的数量。
示例#
显示进程信息。
top
显示完整命令。
top -c
以批处理模式显示程序信息。
top -b
以累积模式显示程序信息。
top -S
设置信息更新次数,表示更新两次后终止更新显示。
top -n 2
设置信息更新时间,表示更新周期为3
秒。
top -d 3
显示指定的进程信息,CPU
、内存占用率等。
top -p 131
不能利用交互式指令来对进程下命令。
top -s
每日一题#
https://github.com/WindrunnerMax/EveryDay
参考#
https://www.computerhope.com/unix/top.htm
https://www.commandlinux.com/man-page/man1/top.1.html
https://www.geeksforgeeks.org/top-command-in-linux-with-examples/
· [杂谈]如何选择:Session 还是 JWT?
· 硬盘空间消失之谜:Linux 服务器存储排查与优化全过程
· JavaScript是按顺序执行的吗?聊聊JavaScript中的变量提升
· [杂谈]后台日志该怎么打印
· Pascal 架构 GPU 在 vllm下的模型推理优化
· 2000 Star,是时候为我的开源项目更新下功能了
· 面试官:DNS解析都整不明白,敢说你懂网络?我:嘤嘤嘤!
· [WPF UI] 为 AvalonDock 制作一套 Fluent UI 主题
· 基于.NET WinForm开发的一款硬件及协议通讯工具
· 内网穿透之http代理服务器