文章目录
- 重点说明
- 基本信息
- 进程(任务)信息
- cpu占用信息%Cpu(s)
- 内存信息
- 交换内存信息
- 每列含义说明
- 交互命令
- 多窗口模式
- 颜色配置
- 命令参数
重点说明
top命令非常强大,也非常复杂,很难面面俱到,也没有必要,这篇文章的目的是介绍重点,授人以渔,希望帮助朋友们以后遇到文中没有介绍的知识点也能举一反三。
本文内容也比较多,重点关注下面的内容即可,其他的需要了再回过头来看也不迟。
- 理解系统负载load average
- 理解VIRT、RES、%Mem内存
- 理解%Cpu参数
- 知道怎么添加删除参数(F、f)
- 了解几个常用的交互命令(M、P、H、m、u、o、n、d等)
- 了解man top,对top有一定了解了,查看对应文档就更轻松了,可以确定不同系统的具体细节
学习是为了应用,先看一个最常用的简单例子,如何找到占用cpu最多的线程?
- 执行top
- 输入交互命令H,进入线程模式
- 输入交互命令P,按CPU使用率排序
线程模式下,PID就是线程id。通过线程id,在结合线程dump我们就可以定位对应的线程代码了。
基本信息
值 | 含义 |
---|---|
13:54:09 | 当前时间 |
up 110days,34min | 系统运行时间 |
1 user | 当前登录用户数 |
load average: 0.24, 0.05, 0.02 | 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值 |
这里面最重要的信息就是load average,平均负载,大致意思就是逻辑cpu上等待执行的task队列数量。
如何判断负载高呢?
通常模式下,load average统计的是所有task队列的数量,所有,需要除以逻辑CPU的数量,如果这个值大于等于3就说明负载偏高。
例如:load average的值为6,逻辑cpu的核心数为4,6/4=1.5,小于3,说明cpu负载正常,瓶颈不在CPU上。
可以通过下面命令,查看cpu相关信息。
cat /proc/cpuinfo# 查看cpu物理核数
cat /proc/cpuinfo | grep "physical id" | sort | uniq|wc -l# 查看cpu逻辑核心数
cat /proc/cpuinfo | grep "processor" |wc -l
# 查看cpu核心数
cat /proc/cpuinfo | grep "cores"|uniq
# 查看cpu型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
可以通过交互命令l(小写L)来显示隐藏该行信息。
进程(任务)信息
值 | 含义 |
---|---|
total | 进程总数 |
running | 正在运行的进程数,R |
sleeping | 睡眠的进程数,S |
stopped | 停止的进程数,T |
zombie | 僵尸进程数,Z |
cpu占用信息%Cpu(s)
值 | 含义 |
---|---|
0.5 us | 用户空间占用CPU百分比 |
1.4 sy | 内核空间占用CPU百分比 |
0.0 ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
98.1 id | 空闲CPU百分比 |
0.0 wa | 等待输入输出的CPU时间百分比 |
0.0 hi | 硬件CPU中断占用百分比 |
0.0 si | 软中断占用百分比 |
0.0 st | 虚拟机占用百分比 |
在交互模式下,我们可以通过数字1来显示每一个逻辑cpu的信息。
内存信息
值 | 含义 |
---|---|
4002264 total | 物理内存总量 |
1213228 free | 空闲内存总量 |
1703096 used | 使用的物理内存总量 |
1085940 buff/cache | 用作内核缓存的内存量 |
buffer缓冲区,通常是文件的meta信息,cache是缓存,通常是内存页page。
可以通过下面命令查看内存具体信息:
# 查看内存信息
cat /proc/meminfofree -h
可以通过交互命令m切换显示内存信息的格式。
交换内存信息
参数 | 含义 |
---|---|
1942896 total | 交换区总量 |
1942896 free | 空闲交换区总量 |
92.2 used | 使用的交换区总量 |
1992616 avail Mem | 可用交换区总量 |
每列含义说明
参数 | 含义 |
---|---|
PID | 进程id |
USER | 进程所有者 |
PR | 进程优先级,PR = 20 + NI,[-20,19] ,默认20 |
NI | nice好人值,值越大,越容易被插队,优先级越低和PR相反,[-20,19],默认0 |
VIRT | 进程使用的虚拟内存总量,VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,RES=CODE+DATA,和%MEM对应 |
SHR | 共享内存大小 |
S | 进程状态,D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 I=空闲进程 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,精度1/100秒 |
COMMAND | 进程名称(命令名/命令行),可以通过交互命令c来切换查看完整命令行 |
有几个参数重点说一下:
- %CPU:普通模式下,可以大于100%,表示有多线程利用了多个cpu,比如4个逻辑cpu最多能跑到400%,表示4个逻辑CPU都跑满了
- VIRT:进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间,如申请100M,就算只使用1M,这个值也是100M
- RES:进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间(不包括swap out),申请100M,使用1M,这个值就是1M
上面这些参数不是全部的参数,可以通过交互命令F或者f添加删除参数。
有4个窗口,默认只有一个Def窗口:
- Def:按 %CPU 排序
- Job:按PID排序
- Mem:按 %MEM 排序
- Usr:按用户字段排序
设置命令:
- 带星号的表示当前要显示的参数
- 可以通过上下箭头(↑↓)控制选中
- 可以通过d或者space(空格)设置是否显示
- 可以通过s设置排序字段
- 可以通过左右箭头(← →)设置选中整行,然后通过上下箭头(↑↓)调整参数显示顺序
- 可以通过q或者esc退出设置
- 可以通过a(下一个窗口)或w(下一个窗口)设置要设置的窗口
交互命令
top有大量交互命令,前面我们也介绍了一些,我们可以在top命令下通过h或者?来查看这些交互命令:
参数 | 含义 |
---|---|
k | 终止一个进程,默认使用15信号,如果不能正常结束那就使用信号9强制结束该进程,在安全模式中此命令被屏蔽 |
r | 设置nice值 |
i | 忽略闲置和僵死进程 |
q | 退出程序 |
S | 切换到累计模式 |
d或s | 改变两次刷新之间的延迟时间,单位为秒 |
f或者F | 从当前显示中添加或者删除参数 |
o或者O | 设置过滤条件,o不区分大小写,O区分大小写 |
u或者U | 根据用户过滤,u不区分大小写,U区分大小写 |
n或# | 设置显示的进程数量,通常我们只关心占用资源最多的几个,所以可以修改为3或者5 |
l(小L) | 切换显示平均负载和启动时间信息 |
m | 切换显示内存信息,可以切换为进度条模式,能直观看出内存占比 |
t | 切换显示进程和CPU状态信息 |
c | 切换显示命令名称和完整命令行 |
x | 高亮排序字段 |
y | 高亮运行中任务Running任务 |
M | 根据驻留内存大小进行排序 |
P | 根据CPU使用百分比大小进行排序 |
T | 根据时间/累计时间进行排序 |
W | 将当前设置写入~/.toprc文件中 |
A | 多窗口模式 |
R | 反向排序 |
H | 线程模式,列表是线程,而不是进程 |
V | 显示进程父子关系 |
Z | 颜色配置 |
Ctrl+L | 擦除并且重写屏幕 |
Ctrl+o | 查看当前过滤条件 |
多窗口模式
前面我们已经介绍了,top有4个窗口
- Def:按 %CPU 排序
- Job:按PID排序
- Mem:按 %MEM 排序
- Usr:按用户字段排序
默认使用Def窗口全屏显示模式,我们可以是用命令A切换到多窗口模式。
可以通过:a、w控制窗口,g输入窗口号选择窗口:
颜色配置
颜色设置也可以根据不同窗口(Def、Job、Mem、Usr)设置。
- S = Summary Data:S设置汇总区域颜色
- M = Messages/Prompts:M设置交互提示信息区域颜色
- H = Column Heads:H设置参数头区域颜色
- T = Task Information:T设置信息body区域颜色
可以通过a或者w切换窗口(Def、Job、Mem、Usr),设置完成回车保存退出,q放弃退出。
当然要每次进入生效,还得W就修改保存到配置文件。
命令参数
除了使用交互命令模式,我们可以直接在top执行的时候指定参数:
参数 | 含义 |
---|---|
-c | 显示完整的命令行 |
-b | 以批处理模式显示程序信息,结合重定向可以输出到文件 |
-S | 以累积模式显示程序信息 |
-H | 以线程模式显示 |
-n 2 | 表示更新两次后终止更新显示 |
-d 3 | 设置信息更新周期为3秒 |
-p pid | 显示进程号为139的进程信息,CPU、内存占用率等 |
-o %CPU | 设置排序字段 |
# 每10秒刷新一次,刷新5次,输出pid为119的top信息
top -d 10 -b -n 5 -p 119 >> top-info.txt