你可能没有好好用过top命令(1)

在企业信息化转型中,去IOE的浪潮推动下,操作系统发生了较大变革,由传统UNIX转向了Linux,尤其业务上云后,云服务提供商提供最多的操作系统也是Linux,使Linux成为目前最主流的企业应用操作系统。

相信搞IT的同学,无论是开发、测试还是运维,Linux的top命令一定都用过,top是查看系统负载非常重要的一个方式,但很多同学其实没有仔细学习过如何使用top命令。 网上已经有大量的关于解释top命令的文章,本文将重要指标背后的含义和进一步的排查思路进行分享,来帮助大家更好的使用top命令,让大家在工作中排查问题时,更加有效、准确的掌握系统的负载情况,找到故障根源。

先看下top是什么样的

多数的同学使用top看的是:

  • 1.当前系统的负载load情况
  • 2.cpu的空闲率%id是不是健康
  • 3.内存使用情况Mem
  • 4.哪个进程的%CPU消耗特别大

网上已经有大量文章解释以上各个参数的含义,这里结合实际经验,当发现关键核心的指标出现异常时需要排查的点进行分享:

  • load average: 0.00, 0.00, 0.00 :负载情况,三个值,代表1、5、15分的系统负载情况,经验值建议不超过cpu数量(查看cpu数量的方法:lscpu),注意Load高不一定会导致CPU利用率高,但通过单个进程的CPU开销可以基本判断导致Load异常的进程,进行进一步排查
  • 0.9%us:进程用户空间的cpu消耗,如果比较高,经验值是超过50%,一般代表应用程序的CPU开销很高,排查具体的进程开销,如果是Java进程,可通过jstack -l pid的方式,打印出该进程的线程运行情况及堆栈信息,判断具体哪个线程出现了CPU消耗异常的情况,更详细的排查方法,将在之后的文章中进行分享(压测、高并发请求下也可用于分析性能瓶颈/优化点)
  • 0.4%sy:内核空间的CPU消耗,如果比较高,一般代表linux系统本身出现了问题,排查dmesg,/var/log/message,硬件是否有错误/异常信息
  • 0.0%wa:等待IO请求的CPU消耗,如果比较高,经验值是超过5%,一般代表磁盘IO出现了问题,应用/系统在等待磁盘IO完成,配合iostat/iotop命令进行分析哪块磁盘/文件系统出现大量IO,配合raid卡日志,IPMI日志排查是否存在异常
  • 0.3%st:CPU资源被该服务器上的其他虚拟机占用,一般代表CPU超卖,该虚拟机的宿主机上的其他虚拟机消耗大量CPU,排查虚拟机分配情况
  • Mem:264500k free :没有”被使用”的物理内存剩余,”被使用”的定义中包括了,进程对内存的使用+cached+buffers,由于cache+buffer可以在有需求时被置换出来,所以基本上物理内存的剩余=free+buffers+cached
  • Swap:87948k used:有多少swap被占用,如果该值不等于0,一般代表有进程使用了swap,需要额外注意,如何查看哪些进程使用了swap,后面的文章会介绍
  • PID:进程号
  • RES:真实物理内存占用,如物理内存占用较高,与预期不符,需查看为进程分配内存的配置是否不合理,如JVM Xmx等参数,或者存在内存溢出的情况。注意:这里是物理内存占用,实际一个进程对内存的占用是包括被分配到swap的空间,所以进程的内存消耗=RES值+SWAP值,另外VIRT一般是不用关心的。
  • %CPU:进程的CPU消耗百分比,该值代表消耗多少CPU资源,每100%为1个CPU,即如果显示值为190%,则代表消耗了将近2个CPU的资源,如果服务器刚好只有2个CPU,则该进程几乎消耗了所有CPU资源
  • %MEM:进程的物理内存占用百分比
  • COMMAND:进程的启动命令,这里没有显示全,可以通过ps -ef|grep PID的方式获取完整的命令

以上给出了比较关键的一些指标和如果发现异常的基本处理思路,后面的章节将对top命令进行拓展,从中获取更多有价值的信息。

总结:

top是我们在性能分析及故障诊断中最常用也是最基本的工具,认真仔细的学习将事半功倍。

“知其然知其所以然”才是学习的捷径。

仔细思考,你一定会有所收获。

欢迎关注:云架构那些事儿,专注实用性云架构分享与IT技术分享。

举报
评论 0