欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux命令---top

程序员文章站 2022-05-13 11:14:38
...

这是我第一次写linux命令篇,提醒一点请学会查看系统自带的手册—有问题找”男人(man)”,一句玩笑莫当真~~
所有命令截图是基于centos7

概述

top命令是Linux下常用的性能分析工具,能够显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用、内存使用、执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令设定。
linux命令---top

统计信息区

前五行是系统整体的统计信息。

第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 时间与其它虚拟机激烈竞争,你的虚拟机会更快地响应。这一点也暗示了,你的主机供应商没有过量地出售虚拟服务,绝对是一件好事情

欢迎补充留言