Linux top 命令的使用

用了好久的top 命令,还没有对其进行一个深入的了解,是时候给自己充充电了:

不管三七二十一,先来一张图:

耐心看一下,东西还不少:

第一行:  top - 10:54:34 up 22 days, 19:51,  1 user,  load average: 0.01, 0.01, 0.00

10:54:34    — 当前系统时间
up 22 days, 19:51 — 系统已经运行了22天19小时51分钟(这里是一个虚拟机,这里听说过一个技巧,去看看一个企业的技术实力咋样,在能接触到服务器的情况下,先top 一下,看看这台服务器开了多久了,一两天,一两个月的,这个技术部可能成立的时间就这么长时间了,正常情况下,谁回去重启linux 服务器啊,都是重启程序的,哈哈^_^)
1 users — 当前有1个用户登录系统
load average: 0.01, 0.01, 0.00 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。(这台虚拟机真空闲)

第二行: Tasks:  79 total,   1 running,  78 sleeping,   0 stopped,   0 zombie

Tasks — 任务(进程),系统现在共有79个进程,其中处于运行中的有1个,78个在休眠(sleep),stoped(停止)状态的有0个,zombie(僵尸)状态的有0个。

第三行: Cpu(s):  1.7%us,  0.3%sy,  0.0%ni, 98.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

us: user的缩写 CPU 消耗在 User space (用户空间)的时间百分比
sy:system 的缩写  是消耗在 Kernel space (内核空间)的时间百分比。
ni:niceness 的缩写,CPU 消耗在 nice 进程(低优先级)的时间百分比
id:idle 的缩写,CPU 消耗在闲置进程的时间百分比,这个值越低,表示 CPU 越忙
wa:wait 的缩写,CPU 等待外部 I/O 的时间百分比,这段时间 CPU 不能干其他事,但是也没有执行运算,这个值太高就说明外部设备有问题
hi:hardware interrupt 的缩写,CPU 响应硬件中断请求的时间百分比
si:software interrupt 的缩写,CPU 响应软件中断请求的时间百分比
st:stole time 的缩写,该项指标只对虚拟机有效,表示分配给当前虚拟机的 CPU 时间之中,被同一台物理机上的其他虚拟机偷走的时间百分比

第四行: Mem:   3924792k total,   304908k used,  3619884k free,    22116k buffers 

total — 物理内存总量(4GB)
used — 使用中的内存总量(0.3GB)
free — 空闲内存总量(3.6G)
buffers — 缓存的内存量 (22M)

第五行:Swap:  4128764k total,        0k used,  4128764k free,   122732k cached

total — 交换区总量(4GB)
used — 使用的交换区总量(0M)
free — 空闲交换区总量(4GB)
cached — 缓冲的交换区总量(122MB)

这里要注意一下:不能用windows的内存概念理解这些数据,第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:3.6+0.02+0.12= 3.74GB。
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

第六行:空白

第七行:PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

多U多核CPU监控产看方法:
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况,在按“1”的情况下对比下图

这里的服务器因为是虚拟机,只有一个内核,有的可以看出cpu0~cpu16,服务器有16个逻辑CPU,实际上是4个物理CPU。

进程字段排序
默认进入top时,各进程是按照CPU的占用量来排序的,
敲击键盘“b”(打开/关闭加亮效果),或者敲击键盘“y”,可以通过敲击“y”键关闭或打开运行态进程的加亮效果。
通过”shift + >”或”shift + <”可以向右或左改变排序,如果看不到效果,可敲击键盘 “x”(打开/关闭排序列的加亮效果),效果展示如下:

可以通过敲击“f”改变进程显示的字段

敲击“f”,看一下初始效果

上图中,前面打“*”, 并且首字母大写的,为进程列表中所显示的字段,如果要取消显示,按键盘相应的字母,如果要增加,也按键盘相应的字母,如:增加CODE 和DATA 这两个字段显示,按键盘“r”和“s”,然后按“回车”,回到显示列表,效果如下:

top命令的补充
top命令是Linux上进行系统监控的首选命令,但有时候却达不到我们的要求,比如当前这台服务器,top监控有很大的局限性。top命令的监控最小单位是进程,所以看不到我关心的java线程数和客户连接数,而这两个指标是java的web服务非常重要的指标,通常我用ps和netstate两个命令来补充top的不足。

监控java线程数:
ps -aux  (或者-elf) | grep java | wc -l
 
监控网络客户连接数:
netstat -n | grep tcp | grep 侦听端口 | wc -l

猜你喜欢

转载自blog.csdn.net/lixiao0320/article/details/84025321
今日推荐