文章目录
top命令用来查看linux进程。可以查看cpu占用,内存消耗等。
top常用命令
任意举几例:
# 显示帮助和版本 其实和 top -h 或 top -v 一样
top -hv
# 根据pid显示进程
top -p 1621
# 根据user显示进程
top -u root
# 设置刷新时间(Change-Delay-Time-interval)
top -d 3
# 显示所有列
top -bcHiOSs
top组合排查问题
top查看cpu高的服务,例如最高的是17850。
查看该pid下线程列表(默认也是倒序):
top -H -p 17850
例如线程最高的是17880,转换为十进制(因为pid默认是按照十六进制存储的):
printf “%x\n” 17880
结果:45d8
查看该服务下该进程的stack。
jstack 17850|grep 45d8 -A 30
详细显示(command列)
场景:
服务器有多个java项目,想要查看各个项目占用的内容。
输入top命令,只显示一个java和总内存,什么也看不出来。
解决办法:
按c即可。 c命令(Command-line/Program-name toggle)切换 程序名 和 command-line 。显示为command-line当然更容易查看了。
不显示空闲类
i 键即可。 是不是清爽多了。
-i :Idle-process toggle 切换空闲进程
排序
大写M : 对内存进行排序显示
大写P:对cpu进行排序显示
大写T:对运行时间进行排序显示
大写N:对PID进行排序显示
以上排序,都是降序排列。想要反序的话,按下大写R。
看不出来根据哪列排序的, 按xb加粗显示即可。
过滤
例如我只想看包含java相关进程,怎办?
输入o,然后输入 COMMAND=JAVA 发现只显示java进程了。
3.fields列操作
top有哪些列
方法不只一种:
1、看网页文档。
2、man top看linux自带文档。
3、top界面,输入f命令,进入列名管理(field management)查看。
列名管理
哪些是默认列?如何设置?
前面带*号的是默认列,可以通过 d或空格 进行切换。
按照哪列排序
s键即可。 第一行会显示 whose current sort field is $CPU
,这里的$CPU就是排序列。
列的显示顺序
光标定位后,按右方向键,表示选中。 然后按上下键调整位置即可。
列管理操作汇总
按f或F键,进入管理界面,说明如下:
前面带有*号的,表示默认显示的列
光标定位 上下键,注:左右键控制选中,所以不是定位键
选中 右键 表示选中(select),左键/enter 表示取消选中(move)
列显示切换 d键 或 空格键
以该列排序 s键 按下后,第一行的内容会变,如whose current sort field is %CPU,就是以cpu列作为排序
退出 q键/esc键
默认显示的列
* PID = Process Id
* USER = Effective User Name
* PR = Priority
* NI = Nice Value
* VIRT = Virtual Image (KiB)
* RES = Resident Size (KiB)
* SHR = Shared Memory (KiB)
* S = Process Status
* %CPU = CPU Usage
* %MEM = Memory Usage (RES)
* TIME+ = CPU Time, hundredths
* COMMAND = Command Name/Line
其他
top命令官网文档(英):
https://man7.org/linux/man-pages/man1/top.1.html