top
命令是 Linux
系统下常用的系统监控工具,通过 top
命令我们可以获取到系统动态运行的信息,包括内存使用情况,系统负载情况,进程的运行情况等等。它有点类似于Windows
系统下的任务管理器。
top -hv|-bcEHiOSs1 -d secs -n max -u|U user -p pid -o fld -w [cols]
参数说明:
-d secs
指定进程列表的刷新速度,单位秒。- 示例:
top -d 5
(每隔五秒刷新一次进程列表)
- 示例:
-n max
指定进程列表的刷新次数,到达指定次数后 top 退出。- 示例:
top -n 3
(在刷新3次进程列表后退出)
- 示例:
-u user
只显示指定用户启动的进程- 示例:
top -u root
(只显示以root
用户启动的进程)
- 示例:
-p pid
只显示指定pid
的进程信息- 示例:
top -p 1
(只显示PID=1的进程)
- 示例:
-o fld
指定使用那一列来对进程进行排序,默认以CPU负载情况倒序排序
- 示例:
top -o -PID
(使用 PID 字段降序排序)
- 示例:
-b
以批处理的模式打印数据。- 示例:
top -b
- 示例:
-i
不显示任何闲置 (idle) 或无用 (zombie) 的进程
对-b
批处理模式的进一步描述
top
命令的批处理模式(Batch-mode
)可以区别于正常使用的交互模式(Interactive-mode
),在批处理模式下top
只会不断打印系统状态,无法接受其他交互模式下的命令。这种状态有点类似于 ping
命令,如果配合-n
选项指定刷新次数的话就更像了,我们可以通过批处理模式将系统状态不断打印到日志中,实现实时监控的效果。
交互模式(Interactive-mode
)
在上面我们提到了一个交互模式的概念,其实正常输入 top
命令不带任何参数进入的一个terminal
界面就是了。我们在这个模式下可以通过交互命令(Interactive Command
)实现一些更加高级的操作,同时上面的top选项也可以在交互模式下通过交互命令实现配置。
如 -d secs
用来指定进程列表的刷新进度,在交互模式下我们可以使用s
命令进行配置。
获取交互命令的帮助h
我们可以输入h
命令获取交互模式的命令帮助。
e
切换内存使用量的显示单位
通过e
命令可以帮助我们切换内存大小的显示单位,从默认的字节为单位到 PB
。
m
切换内存使用量的显示样式
通过m
命令可以切换内存的显示样式,默认情况先会以数字展示,通过m
命令可以切换为进度条样式显示百分比。
n
设置进程的显示数量
b
高亮排序列
H
显示线程
通过 top 命令可以获取到进程中对应的线程状态,我们可以使用 H
命令切换到线程视图。
i
切换是否显示空闲进程
默认显示。切换后对当前没有使用一点 CPU 时间的进程将不会被显示出来。top 命令会以上次该选项的状态作为默认选项,也就是如果在上一次是否有用 i
命令筛选非空闲进程,如果有的话则以上一次的状态为准来显示本次 top
命令的进程。
k
结束指定进程
通过该命令可以指定一个 PID
并且项该进程发送指定的信号(默认为 15(SIGTERM
)),这个命令类似于 kill -15 <pid>
,但是是在 top
中执行的。
V
命令显示进程的树状结构
v
命令隐藏进程的子节点
这个命令一般与大 V
命令配合,在树视图下,可以通过 v
实现节点的折叠
F
命令指定字段过滤
在输入 F
命令后会出现一个界面,用于对显示列和排序列进行配置:
使用方向键 Up/Down 进行上下移动
使用右方向键选定字段然后 Up/Down 拖动对字段顺序进行排序
使用左方向键退出选定字段
d 或者空格键来确定是否显示当前字段
s 来设置当前字段
q 或者 退出配置
o
命令执行过滤
top
命令支持使用过滤器实现对目标进程的过滤,我们可以自定义过滤器进行过滤。
使用
o
命令实现的过滤器是对数据忽略大小写的
使用O
命令实现的过滤器对大小写敏感
使用 Ctrl+o 显示当前生效的过滤器。
使用 =重置当前窗口的过滤器
使用 +重置全部窗口的过滤器
使用 o
命令,然后输入过滤条件 PID>100
,点击回车使其生效。
过滤器
这里我们来讲一下过滤器的表达式语法,如上述的 PID>100
所表示的是 PID
大于 100,的进程。
而对于top
中支持的过滤器完整的表达式格式如下:
<!> <字段名称> <操作符> <包含值/排除值>
当过滤器以 !
开始时,表示排除符合后面过滤器进程。
# 过滤满足 PID <= 100 的进程
!PID>100
# 过滤满足 PID>104 的进程
PID>104
# 过滤满足 COMMAND=init (COMMAND中包含init)的进程
COMMAND=init
top
命令支持>
,<
,=
这三类操作符。
其中=
运算符只要求部分匹配,因此当我们需要查找某个命令启动的进程时,不需要输入全部命令,只需要输入部分命令即可。
对于 top 命令是支持精确匹配的,需要在<包含值/排查值>左右添加单引号如:
COMMAND='init'
而>
,<
预算符在运算过程中对于数字列,也会将数字作为字符串进行判断大小,即比较方式为字典序。
在通过
J
,j
在调整列的对齐方式时,也有可能导致过滤器失效(影响到字典序的排序),需要注意。
亦或者通过
e
在调整内存的计量单位时,对相关列上使用FILTER
进行过滤也存在过滤结果与预期不符,如在字符串比较下FILTER
会认为100.0m
(MiB) 大于1.000g
(GiB)。
c
是否显示完整命令
通过 c
可以切换COMMAND
列是否显示完整的命令,默认是指显示进程的名称,使用该命令可以获取到命令行
J,j
调整进程列表的对齐方式
J
可以切换对数字列的对齐方式(默认右对齐),如果数字长度超出该列长度,则该调整有可能影响表头的对齐。
j
可以切换字符串列的对齐方式,如果字符串长度超出该列长度,则该调整有可能影响表头的对齐。
滚动窗口
在top
的交互模式下,我们可以通过方向键 Left,Right,Up,Down来实现对窗口的上下左右移动,同时分页的 PageUp,PageDown也是可以使用的。