linux命令---top
这是我第一次写linux命令篇,提醒一点请学会查看系统自带的手册—有问题找”男人(man)”,一句玩笑莫当真~~
所有命令截图是基于centos7
概述
top命令是Linux下常用的性能分析工具,能够显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用、内存使用、执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令设定。
统计信息区
前五行是系统整体的统计信息。
第1行:任务队列信息
同 uptime 命令的执行结果。
数据 | 含义 |
---|---|
19:15:19 | 当前时间 |
up 531 days 7:42 | 系统运行时间,格式为天,时:分 |
3 user | 当前登录用户数 |
load average: 0.00, 0.00, 0.00 | 系统1分、5分、15分到现在的平均负载,即任务队列的平均长度。 |
第2行:进程信息
当有多个CPU时,这些内容可能会超过两行(通过按数字1展开所有cpu):
数据 | 含义 |
---|---|
Tasks: 187 total | 进程总数 |
1 running | 正在运行的进程数 |
186 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
第3行:CPU信息
数据 | 含义 |
---|---|
Cpu(s): 1.0% us | 用户空间占用CPU百分比 |
0.1% sy | 内核空间占用CPU百分比 |
0.0% ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
98.8% id | 空闲CPU百分比 |
0.0% wa | 等待输入输出的CPU时间百分比 |
0.0% hi | 硬中断(Hardware IRQ)占用CPU的百分比 |
0.1% si | 软中断(Software Interrupts)占用CPU的百分比 |
0.0% st | 虚拟 CPU 等待实际 CPU 的时间的百分比 |
第4行:内存信息
数据 | 含义 |
---|---|
Mem: 32915684k total | 物理内存总量 |
16540936k used | 使用的物理内存总量 |
16374748k free | 空闲内存总量 |
1194868k buffers | 用作内核缓存的内存量 |
第5行:交换区信息
数据 | 含义 |
---|---|
Swap: 4192956k total | 交换区总量 |
1212k used | 使用的交换区总量 |
4191744k free | 空闲交换区总量 |
8685672k cached | 缓冲的交换区总量。 |
swap使用大小:内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。
使用内存总量(used):现在系统内核控制的内存数
空闲内存总量(free):是内核还未纳入其管控范围的数量。
* 注意 * 纳入内核管理的内存不一定都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
多说一句:因为linux有一种思想—不用白不用,因此它尽可能的cache和buffers一些数据看以方便下次使用,但实际上这些内存是可以直接拿来使用的,准确的可使用内存 【可使用内存=free+buffers+cached】
linux为提高效率,会提前申请内存,即使这些内存没有被具体使用,linux也会提前申请这些内存,然后用这些内存做缓存用,即将刚打开的文件系统缓存入cache,这样对用的服务器free值也会越来越少,buffers和cached会越来越大,其实linux服务器内存不足时,会自动清理cached区域释放内存,然后继续增加cached,free继续减少。
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了(当然也可以用vmstat统计si和so这个命令后续会专门介绍)。
进程信息区
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义(通过快捷键f调出,已排序)。
序号 | 列名 | 含义 |
---|---|---|
a | PID | 进程id |
b | PPID | 父进程id |
c | RUSER | Real |
d | UID | 进程所有者的用户id |
e | USER | 进程所有者的用户名 |
f | GROUP | 进程所有者的组名 |
g | TTY | 启动进程的终端名。不是从终端启动的进程则显示为 |
h | PR | 优先级 |
i | NI | nice值。负值表示高优先级,正值表示低优先级 |
j | P | 最后使用的CPU,仅在多CPU环境下有意义 |
k | %CPU | 上次更新到现在的CPU时间占用百分比 |
l | TIME | 进程使用的CPU时间总计,单位秒 |
m | TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
n | %MEM | 进程使用的物理内存百分比 |
o | VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
p | SWAP | 进程使用的虚拟内存中,被换出的大小,单位kb。 |
q | RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
r | CODE | 可执行代码占用的物理内存大小,单位kb |
s | DATA | 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb |
t | SHR | 共享内存大小,单位kb |
u | nFLT | 页面错误次数 |
v | nDRT | 最后一次写入到现在,被修改过的页面数。 |
w | S | 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) |
x | COMMAND | 命令名/命令行 |
y | WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
z | Flags | 任务标志,参考 |
默认显示: PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。
修改显示:通过 f 键可以选择显示的内容。
1)按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
2)按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
3)F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。
4)R 键可以将当前的排序倒转。
VIRT:virtual memory usage
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
命令使用
命令格式
top -hvV | -bcHisSMm -d delay -n iterations [-u user | -U user] -p pid [, pid …]
选项说明
选项 | 含义 |
---|---|
d | 指定每两次屏幕信息刷新之间的时间间隔。或者使用s交互命令来改变 |
p | 通过指定监控进程ID来仅仅监控某个进程的状态 |
q | 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行 |
S | 指定累计模式 |
s | 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 |
i | 使top不显示任何闲置或者僵死进程 |
c | 显示整个命令行而不只是显示命令名 |
交互命令
使用交互命令最好就不要用s参数,若使用s参数会屏蔽掉一部分交互命令。
命令 | 作用 | |
---|---|---|
Ctrl+L | 擦除并且重写屏幕 | |
h/? | 显示帮助画面,给出一些简短的命令总结说明 | |
k | 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽 | |
i | 忽略闲置和僵死进程。这是一个开关式命令 | |
q | 退出程序 | |
r | 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10 | |
S | 切换到累计模式 | |
s | 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m | s。输入0值则系统将不断刷新,默认值是5 |
f/F | 从当前显示中添加或者删除项目 | |
o/O | 改变显示项目的顺序 | |
l | 切换显示平均负载和启动时间信息 | |
m | 切换显示内存信息 | |
t | 切换显示进程和CPU状态信息 | |
c | 切换显示命令名称和完整命令行 | |
M | 根据驻留内存大小进行排序 | |
P | 根据CPU使用百分比大小进行排序 | |
T | 根据时间/累计时间进行排序 | |
W | 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。 |
可排查什么问题
1、查看服务器启动时间,观察是否被动重启过:up
2、查看服务器负载:Load average
3、查看服务器进程情况:tasks,是否存在僵尸等
4、查看CPU使用是否正常:
1)总体cpu使用是否正常
2)user和sy使用占比是否正常
3)wa占比是否正常
4)结合数字1查看单核CPU是否正常,经常会有单线程跑满某一核CPU,或者多线程的某一个线程异常导致某一核CPU使用过高,这些从总的CPU情况无法判断(替换命令mpstat -P ALL 1更详细)
5、查看内存是否足够,主要查看swap(参看统计信息最后说明)
6、可查看任务优先级
7、查看进程所消耗资源进一步排查问题:比如排查最占资源的线程信息
1、top查到pid
2、top -Hp pid 找到对应线程tid
3、将tid转换成16进制记为0xtid
4、jstack pid|grep 0xtid -A 30
5、根据打出的栈信息分析问题
8、st%:steal 值比较高的话,你需要向主机供应商申请扩容虚拟机。服务器上的另一个虚拟机可能拥有更大更多的 CPU 时间片,你可能需要申请升级以与之竞争。另外,高 steal 值可能意味着主机供应商在服务器上过量地出售虚拟机。如果升级了虚拟机, steal 值还是不降的话,你应该寻找另一家服务供应商。
低 steal 值意味着你的应用程序在目前的虚拟机上运作良好。因为你的虚拟机不会经常地为了 CPU 时间与其它虚拟机激烈竞争,你的虚拟机会更快地响应。这一点也暗示了,你的主机供应商没有过量地出售虚拟服务,绝对是一件好事情
欢迎补充留言