top命令详解
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 #:刷新多少批次

浙公网安备 33010602011771号