名称
top - 显示linux服务器下进程
命令语法
top -hv|-bcEeHioSsl -d secs -n max -u|U user -p pids -o fields -w [cols]
描述
top可以用于实时地以列表形式展示当前系统中正在运行的进程或者线程的信息。而且展示出来的信息的格式、顺序以及信息的多少都是由用户来自定义的。
top还提供了有限的交互接口用于操纵进程。
概览
操作
第一次使用top时,你会看到画面中分为3块区域:1)概览区域2)表头3)任务区域。在摘要区域和表头之间还会有一块用于输入信息的区域。
默认的top视图linux内存类型
有3种类型的内存,其中一个是可选的。第一种就是物理内存,资源有限,在代码和数据被执行或者引用时必须驻留在其中。然后就是可选的swap文件,如果物理内存不够用就会使用使用。最后是虚拟内存,一个满足以下几个需求的而且几乎无限的内存资源:
1.抽象,不受物理内存限制
2.隔离,每个进程都有一个独立的地址空间
3.共享,单个映射可以服务多种需求
4.灵活性,给一个文件分配一个虚拟地址
不论内存采用哪种形式,所有的内存都是以“页”(一页4096bytes)的形式来管理,但是在top中默认是以kb为单位来显示的。注意,以下的内容中,在“内存使用率”中讨论的内存指的是整个系统的内存,而在“字段/列”中讨论的则是针对单个进程的内存。
对于每个进程而言,每个内存页都属于以下4种情况之一。物理内存和虚拟内存可以是4种中的任意一种,而swap则只能是#1或者#3.属于#4的内存,在修改的时候,作为它自身的专用交换文件。
关于linux中描述的内存类型,还可参考这篇文章:https://blog.csdn.net/zxcc1314/article/details/85036640
关于什么叫文件背景页,可以参考:
https://cloud.tencent.com/developer/article/1404071
以下的信息可以帮助来解释进程级的内存,并且将会在“字段的描述”这一部分进行讨论。
%MEM - 用RES除以总物理内存的比值
CODE - #3中的pgms区域的内存
DATA - 第一象限中的虚拟内存加上所有明确的使用文件的mmap内存页(#3)
RES - 任何产生的物理,从linux4.5开始,就代表着如下3个字段的总和:
RSan - #1的页,#3中的任何内容如果发生了修改就会进入到这里
RSfd - #3和#4,都是以磁盘上文件为基础
RSsh - #2,和1类似也是实际存在于内存中的,不过这里是用于公共资源的
RSlk - RES的子集,无法被移除
SHR - RES的子集(包含#2、#3、#4的内存)
SWAP - 除了#4以外的任何可能的内存
USED - RES和SWAP的总和
VIRT - 任何使用中的或者被保留的内存(可以是任何象限的)
注意:虽然程序镜像和公共库是对进程私有的,但是在内核中它们会作为SHR被一同统计。
命令行选项
首先来介绍一下命令行的语法:
top -hv|-bcEeHiOSs1 -d secs -n max -u|U user -p pids -o field -w [cols]
-h/-v 显示帮助信息和版本号
-b 批处理操作
所谓批处理操作就是让命令一次性执行完毕,而不是挂在前台或者后台一直执行,比如top命令在不带参数和选项的情况下,就是挂在前台一直刷新展示系统信息,但是有个时候我们只是希望它能按照指定的次数输出一次结果并把它保存下来就好了,而不是一直坐在电脑观察。一般来说-b选项还要配合-n选项来指定循环次数一起使用,如果不指定-n的话,那么top仍然会不停地刷新执行。
配合cron,来1分钟打印一次系统资源信息并将其保存到文件中:
* * * * * top -b -n 1 > ~/top.log
-c 显示进程所执行的完整命令以及参数。按照最后一次记住的c状态的相反状态来执行top。也就是说如果最后一次显示top是显示的命令行,则这次显示的就只是程序名称,反之亦然。
-d top指令的数据刷新时间间隔: -d ss.t(秒数)
在交互界面中可以通过d或者s指令来更改
-e 更改任务列表的内存单位:-e k|m|g|t|p|e
默认情况RES VIRT 这些内存用量只会显示数字是不带单位的,使用-e k|m|g|t|p可以调整它显示的单位
-E 更改摘要部分的内存显示单位,用法同-e
-H 线程模式 操作:让top展示独立的线程,如果不指定这个选项的话,top展示的则是每个进程的所有线程之和。在交互模式中可以通过H来调整。
-i 空闲进程 开关:
按照最后一次记住的i状态的反转来执行top命令。当-i关闭时,那些从上次数据刷新之后没有使用过任何cpu的进程就不会展示了,注意,这里的上次指的是当前时间之前的上一次数据刷新,而不仅仅是执行top命令开始的那一次,也就是说使用-i之后,top展示的数据是会随着数据刷新而一直刷新的,如果一个进程在第一次刷新后有使用过cpu那么它会展示出来,但是如果在第二次数据刷新之后它就没有用cpu了,那么它就会从页面消失掉
-n 最大刷新次数: -n number
-o 排序字段: -o fielxdname
-O 展示出所有可用的字段名称,一行一个
-p 指定监控的pid: -pN1 -p N2或者 -pN1,N2,N3...
-s 安全模式 操作:这个选项最好是通过配置文件来指定
-u | -U: 用户过滤模式: -u | -U uid 或者 name,只展示用户id或者用户名称像匹配的进程。其中-u选项只能用于匹配有效用户,而-U可以用于匹配任意用户("有效用户"、已保存用户或者文件系统),有效用户的概念在此不做解释
可以通过在uid或者name前面加上!来进行反选(centos8实测无效)
-1(数字1) 单个cpu状态 开关:
要么在单行展示所有cpu信息,要么每行单独展示一个cpu信息,这取决于NUMA Node命令的开关(在top画面中按数字键2打开NUMA)
2.摘要视图
摘要视图2a.运行时间和系统负载,第一行
程序名或窗口名 - 当前系统时间 运行时长(自上次开机之后)当前用户数 当前系统负载(分别代表1、5、15分钟内)
2b.任务和cpu状态
这一部分由2行组成。额外的行可以反映独立的CPU状态百分比
第一行展示了所有的任务,或者线程(取决于线程模式是否打开,按下H可打开线程模式)。
默认的top界面 打开线程模式后的top界面第二行展示了基于上次之后的时间间隔内的CPU状态百分比
默认情况下,这些单个类别的百分比被显示出来。 在下面显示两个标签的地方,较新的内核版本的标签会先显示。
字段解释:
us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa,iowait 等待输入输出的CPU时间百分比
hi 硬件中断的时间
si 软件中断的时间
st: 从虚拟机中窃取的时间
2c.内存部分
这一部分由两行组成,默认情况下第一行反映的是物理内存,总共有:总内存大小、可用内存、已使用内存和buff/cache
第二行展示的是虚拟内存,主要有:总虚拟内存大小、可用、已用和可用(该可用是物理内存)
内存概要信息第二行中的avail数值是一个可以不用swap的用于启动新应用的预估的物理内存。不像free字段,它会把内存缓存也统计进来。这在内核3.14,2.6.27下模拟的内核有效,否则它就和free字段含义一样。
在多窗口模式下(按m来切换),两行摘要会以如下形式展示:
多窗口模式下的内存信息展示格式为: 内存展示的单位 : 当前已用内存的百分比/当前总共内存容量 [...一个表示内存用量的图示]
3.字段/列. 字段的描述
3a.下面来说明在top中可以使用的字段以及相应的描述
列出的字段的格式以及具体需要展示哪些字段可以通过 f 来打开字段管理界面来调整
表格中的数据可以按照任何一个字段来进行排序,预设的按键有: P(按CPU使用)M(按内存占用%MEM) T(按运行时间TIME)来排序,也可以使用< >来左右调整需要用来排序的字段,按下R可以反转排序
表格中与内存相关的数值在展示的时候,其数值单位(也就是kb mb gb tb..)可以通过按下e来切换
以下列出常用的字段作以说明:
%CPU: cpu使用率
任务自上次屏幕刷新(也就是top数据刷新)之后所使用的cpu时间的占比。
在SMP环境(https://cloud.tencent.com/developer/article/1413542)中,如果一个进程是多线程的而且top没有以线程模式运行,那么该数值可能会超过100%
对于多处理器的环境,如果Irix模式关闭了的话,top将会以solaris模式操作,那么任务的cpu使用率应该除以cpu的核数。你可以通过I来打开/关闭Irix模式。
关闭irix模式/打开solaris模式 打开irix模式/关闭solaris模式注意:当以树形结构运行时,这个字段还会包含那些不可见的子进程的CPU时间。
%MEM: 内存使用率(RES的百分比表示)
在当前可用的物理内存中的一个任务驻留内存所占的份额/比重
CODE: 代码容量(KiB)
当前任务用于执行代码的内存大小,也称为文本常驻集容量
COMMAND: 命令名称或者完整命令行,可以通过按下c来切换为程序名称或者完整命令行
DATA: 数据和栈容量(KiB)
一个进程的私有的保留的内存。也称为数据常驻集。这样的内存可能不会映射到物理内存中去但是总是会被包含在VIRT中。上面的内存类型也有说明
ENVIRON:环境变量
展示所有用到的环境变量
RES: 驻留内存容量(KiB)
这里的驻留/常驻指的长期驻留在真实物理内存中的意思
这是属于VIRT的子集代表着当前进程使用的非交换的物理内存。它同时也是RSan,RSfd,RSsh这几个字段之和。
它可以包括私有匿名页、私有的文件背景页(包括程序图像和共享库)以及共享匿名页。 所有这些内存都由SWAP下单独表示的交换文件支持。
最后,这个字段也有可能包含共享的以文件支撑的页,将其作为的专用的交换文件,因为不会影响到swap
RSan 常驻/驻留匿名内存
RES的子集,其表示私有的不映射到文件的页,非文件背景页的内存,又称匿名内存页
RSfd 驻留文件支持的内存(文件背景页内存)
代表具体的程序文件以及一些公共的库所使用的文件背景页的内存,也包含明确文件映射,私有和公共的。
RSlk 驻留的锁定的内存
也是RES的子集,锁定的内存,也即无法被交换出去的内存页,也就是说这一段内存在程序运行期间是一直位于物理内存上的,无法通过swap或者page cache等将其交换到硬盘上
RSsh 驻留的共享内存
也是RES的子集,表示明确的共享的匿名 shm*/mmap 的内存页
SHR 共享内存
也是RES的子集,可以被其他进程使用的共享内存部分。它包含了共享匿名内存页和共享文件背景页。也包含了映射到文件的私有的代表程序文件和公共库的内存页。
DATA 数据+栈容量
被一个进程保留的私有内存容量。也被称为数据驻留集。这样的内存可能不会映射到物理内存(RES)中但是总是会被包含到虚拟内存(VIRT)容量中。
3b.管理字段
通过按下f或者F就可以打开一个新的界面,你可以看到:1)当前窗口名称2)设计好的排序字段3)所有字段的当前顺序和描述。
使用方法:上下选择字段,右箭头选中,再通过上下键可以调整位置,左箭头释放。d或者空格键用于控制字段是否展示。s设置该字段作为排序字段。a和w用于应用与所有窗口,q或者esc键退出
4.交互按键
大致分为6类,以下仅介绍重点常用的命令:
4a.全局命令
注意: 以下命令中,命令前面带有 星号* 的,表示其在安全模式下不可用
全局命令在全屏模式或者多窗口模式下都可用。但是有部分交互命令在安全模式下不可用。
回车 或 空格: 刷新数据
? | h: 帮助页面,这个帮助页面有2级,第一次按?|h会进入到一个基础的交互命令的帮助页面,在这个页面上再次按下?|h的话,则会进入到多窗口模式的操作帮助页面
=: 关闭视图限制
可以将之前通过 i,n,v等指令对top界面进行的筛选全部去除
A: 多窗口模式 开关
* d|s: 数据刷新时间间隔
用于设置数据时间间隔,允许设置到小数级别的秒数,不允许设置负数。0表示持续刷新(以非常高的频率不停的刷新)
E: 摘要区域的内存单位
e: 任务区域的内存单位
0: 不显示为0的字段
这条命令决定任务区域中的0是否展示,尤其指内存这一类的字段,UID GID NI PR P这些字段不受它影响
H: 线程模式 开关
I: Irix/Solaris模式 开关
在Solaris模式下(Irix是关闭的),任务的cpu使用率将被除以cpu的数量
k: 杀死一个任务
q: 退出
* r: 重新设置一个进程的nice值
W: 将当前显示的设置保存到文件,这样下次再次打开top时,就可以继续按照之前设置过的视图来查看了
Z: 改变颜色设置
按下Z将会进入到一个专门设置当前窗口或者所有窗口的颜色的界面
颜色设置操作界面 在多窗口模式下改变过颜色后4b.摘要区域的交互命令
摘要区域的交互命令在全屏模式和多窗口模式都可用。它们会影响你看的头几行并且决定着信息和提示的位置。
l: 负载/运行时间 开关
在全屏模式下运行时,这一行会显示程序名称,在多窗口模式下这里显示当前窗口名。
t: 任务/cpu状态 开关
这个命令用于4向开关:
1.按分类的详情百分比
2.简要的用户/系统和总计的%条形图
3.简要的用户/系统和统计的%块状图
4.关闭任务和cpu状态展示
m: 内存/交换分区使用率 开关
这个命令影响到摘要区域中与物理和虚拟内存相关的2行
这个命令有4向开关:
1.按内存内存类型区别的百分比
2.简要的 已用/总计 可用 + 条状视图
3.简要的 已用/总计 可用 + 块状视图
4.关闭内存视图
1: 单个/分离的cpu状态 开关
这个命令也会影响到t命令切换视图的样式,打开时,所有cpu的信息都集合在一行,关闭时,会分多行分别显示各个cpu的信息
2: NUMA节点/cpu摘要 开关
4c. 任务区域的开关
任务区域的交互命令在全屏模式下总是可用的。
而在多窗口模式下如果当前窗口的任务视图被关闭了的话那么这些将不可用(在5.多窗口模式部分有提到)。
外观部分:
x: 高亮排序字段,在搜索和过滤的时候,列高亮是关闭的。
y: 高亮运行中的任务
z: 颜色开关,在你最后一次使用的颜色模式和更早的黑白模式之间进行切换,这个开关会同时影响到摘要区域和任务区域。
内容部分:
c: 命令行/程序名切换,用于更改COMMAND字段展示的程序名还是命令行
o|O:
f|F:字段管理
u|U:只查看指定用户的进程,-u表示从有效用户中筛选,-U表示从所有用户中筛选(有效,真实,已保存或者文件系统用户),输入u|U会提示你输入uid或者用户名,输入了之后按回车确定即可,如果过滤了之后又想恢复成显示所有人的话,那么就再次按下U,然后直接按回车就好了。
V: 树形结构模式 开关
任务窗口尺寸:
i: 是否要显示空闲进程,所谓空闲进程指的就是自上次更新之后一直没有使用到cpu的任务。
排序:
top有几种预设排序快捷键:
M: %MEM, N: PID, P: %CPU, T: TIME+
要调整当前排序字段,可以使用< >来往左或往右来调整
要调整 倒序或者 正序的话,使用 R来切换
5.多窗口模式配置
5a.窗口概述
在全屏模式下整个屏幕只会展示一个窗口。这个窗口可以改变为四个拥有不同的字段组的视图中的一个。每个字段组都有唯一独立的可配置的摘要区域而且属于它自己的可配置的任务区域。
在多窗口模式下,这四个字段组可以同时展示,还可以通过命令单独关闭。
当前窗口:当前窗口值得与摘要区域相关联的的窗口而且相关的命令直接操作到的窗口。
5b.用于窗口的命令
- | _:显示/隐藏当前窗口的任务区域
* = | +: 重置窗口,也就是移除所有通过 u|U o|O i V L n 等对视图进行筛选或调整的操作。而且,如果窗口有进行滚动拖放,那么光标位置也会重置。
* A : 多窗口模式的开关
* a | w: 切换上一个/下一个窗口为当前窗口
* g: 手动输入序号来切换当前窗口
G: 更改当前窗口的名称
5c. 在窗口中滚动
上下左右方向键,按C可以打开当前坐标
5d. 在窗口中搜索
你可以使用这些交互命令去定位一个任务所在的行:
L: 定位一个字符串
&: 定位到下一个,也就是使用L搜索了之后,是用&跳转到下一个,类似于vim中的n
5e.在窗口过滤数据:
这个功能又叫做Other Filter其他过滤特性,你可以使用其他过滤特性来建立选中条件,就可以将那些符合条件的任务筛选出来了。有一些过滤器可以通过保存功能(W)将其持久化到配置文件中。
建立过滤需要:1)字段名2)操作符3)选中值,最起码要有这3个。
通过过滤器来过滤任务视图中的数据
网友评论