linux命令---top

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

概述

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

序号列名含义
aPID进程id
bPPID父进程id
cRUSERReal
dUID进程所有者的用户id
eUSER进程所有者的用户名
fGROUP进程所有者的组名
gTTY启动进程的终端名。不是从终端启动的进程则显示为
hPR优先级
iNInice值。负值表示高优先级,正值表示低优先级
jP最后使用的CPU,仅在多CPU环境下有意义
k%CPU上次更新到现在的CPU时间占用百分比
lTIME进程使用的CPU时间总计,单位秒
mTIME+进程使用的CPU时间总计,单位1/100秒
n%MEM进程使用的物理内存百分比
oVIRT进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
pSWAP进程使用的虚拟内存中,被换出的大小,单位kb。
qRES进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
rCODE可执行代码占用的物理内存大小,单位kb
sDATA可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
tSHR共享内存大小,单位kb
unFLT页面错误次数
vnDRT最后一次写入到现在,被修改过的页面数。
wS进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
xCOMMAND命令名/命令行
yWCHAN若该进程在睡眠,则显示睡眠中的系统函数名
zFlags任务标志,参考

默认显示: 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。如果有小数,就换算成ms。输入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 时间与其它虚拟机激烈竞争,你的虚拟机会更快地响应。这一点也暗示了,你的主机供应商没有过量地出售虚拟服务,绝对是一件好事情

欢迎补充留言

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值