top命令概览
首先,让我们了解一下输出。top命令会显示系统的很多信息。我们需要理解不同部分输出的意义:默认运行时,top命令会显示如下输出:
前几行水平显示了不同系统参数的概括,接下来是进程和它们在列中的属性。
系统的运行时间和平均负载
16:04:01
:当前时间up 43 days, 2:41
:系统运行时间1 user
:当前登陆的用户个数load average: 0.06, 0.04, 0.05
:相应最近5、10和15分钟内的平均负载
最后三个数值是最重要的。从这几个数值可以看出系统系统负载是上升、平稳、下降等趋势,它是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值,如果这个数除以逻辑cpu的数量,结果高于5的时候表明系统超负荷运转了。逻辑cpu的个数可以这么看cat /proc/cpuinfo| grep "processor"| wc -l
任务
系统现在共有113个进程,其中处于运行中的有1个,112个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个
cpu状态信息 cpu状态信息
按数字1
会显示所有的 cpu
0.2 us
:用户空间占用CPU的百分比,当此值过大时,通常是某些个别的进程占用了大量的CPU,这时候很容易通过top找到该程序;此时如果怀疑程序异常,可以通过perf等思路找出热点调用函数来进一步排查0.1 sy
:内核空间占用CPU的百分比,如果IO操作(包括终端IO)比较多,可能会造成这部分的CPU占用率高,比如在file server、database server等类型的服务器上,否则(比如>20%)很可能有些部分的内核、驱动模块有问题;0.0% ni
:改变过优先级的进程占用CPU的百分比,通常是有意行为,当进程的发起者知道某些进程占用较高的CPU,会设置其nice值确保不会淹没其他进程对CPU的使用请求99.7 id
:CPU在空闲状态(执行kernel idle handler)所占用的时间0.1 wa
::等待IO完成做占用的时间,当iowait占用率过高的时候,通常意味着某些程序的IO操作效率很低,或者IO对应设备的性能很低以至于读写操作需要很长的时间来完成;0.0 hi
:系统处理硬件中断所消耗的时间0.0 si
:系统处理软中断所消耗的时间,记住软中断分为softirqs、tasklets(其实是前者的特例)、work queues,不知道这里是统计的是哪些的时间,毕竟work queues的执行已经不是中断上下文了0.0 st
: 在虚拟机情况下才有意义,因为虚拟机下CPU也是共享物理CPU的,所以这段时间表明虚拟机等待hypervisor调度CPU的时间,也意味着这段时间hypervisor将CPU调度给别的CPU执行,这个时段的CPU资源被”stolen”了。这个值在我KVM的VPS机器上是不为0的,但也只有0.1这个数量级,是不是可以用来判断VPS超售的情况?当steal占用率过高的时候,黑心厂商虚拟机超售了吧!
内存信息
8010528 total
:物理内存总量(8GB)161292 free
:空闲内存总量(156M)529748 used
:使用中的内存总量(516M)7319488 buff/cache
:(6.9G)
注意:total = free + used + buffer/cache
- buffer:缓冲,针对
write
操作,匹配将数据先缓存再内存中,隔段时间就刷写到磁盘上,这段数据丢失了,就找不回了- cache:快取,针对
read
操作,将程序需要的数据提前缓存扎起内存中,供应用进程使用。这段数据可以重复读取,可以丢失,- cache回收:
cho 1 > /proc/sys/vm/drop_caches
swap分区信息
2097148 total
:交换区总量(2G)2097148 free
:空闲交换区总量(2G)0 used
:使用的交换区总量(0K)779528 avail Mem
:可以给新开启的程序多少内存空间,大致和free + buff/cached相当,而这也印证了上面的说法,free + buffers + cached Mem才是真正可用的物理内存
程序的资源占用列表
- 排序:
P
:以占据的cpu百分比排序M
:占据内存的百分比T
:累积占据cpu的时长
- 首部显示命令
l
:uptime信息t
:task和cpu信息1
:数字1,显示所有的cpu情况m
:memory 信息s
:输入数字,修改刷新时间间隔k
:输入pid,终止指定的进程W
:保存文件
选项:
-d #
:指定刷新时间间隔,默认3s-b
:以批次方式显示-n #
:刷新多少批次