Arthas

背景介绍

年底了,公司基本没啥任务了,闲来无事想着对手头上维护的系统进行优化下,系统是由pc后台加三个小程序端组成,分别对应三种不同角色的用户。分别是楹回收(对应居民用户)、楹回收中转仓端(后台运营人员)、楹回收清运端( 司机用户)。
我目前优化的是楹回收中转仓端 小程序,有个查询入库记录、取消操作入库的操作,其中查询操作的最终查询结果只有10几条的样子,但是要花费将近10s, 我自己都感觉要崩溃了更别说每天都在操作的用户了,还好这个是纯查询的操作,可能操作频率不是那么频繁,但是还是忍不了,于是决定对他进行整治。

所以Arthas闪亮登场

介绍

arthas是阿里开源的一款线上监控诊断产品,通过全局视角实时查看应用内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法的出入参、异常、检测方法执行耗时,类加载信息等,大大提升线上问题排查效率。详情参考官网链接。
(ps : 对内存以及GC问题的监控排查,本人目前还不是很熟练,阅读过我之前博客的朋友可能知道,我由于在定位不到内存异常的问题,给不了优化的思路,最终只能使用重启的解决办法,可以参考之前的博客 Prometheus+Grafana搭建运维平台,实现jenkins自动构建+飞书告警

Arthas

Arthas安装

直接去Arthas官网下载 arthas-boot.jar这个jar然后普通启动方式启动就好
启动后需要选择对应的进程id进入监控。然后就可以使用trace命令对该进程内的接口进行监控。
在这里插入图片描述

trace

本次使用的命令是trace,trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。能方便的帮助你定位和发现因RT高而导致的性能问题缺陷。

命令格式为 trace class-pattern method-pattern
输入命令后 然后想办法触发监听的接口执行,接着trace下面就会有将该接口下的具体执行监控打印出来了。

在这里插入图片描述

从截图中可以看到 cancelStationStorageAndProcess()方法执行占比40%多,点进去细看,发现是一个连表查询的操作
在这里插入图片描述
我又看了下这两张表的数据量

在这里插入图片描述
在这里插入图片描述

然后看了下ts_transaction_detail这张表的索引,发现 连表的关联列 transaction_id没有加索引,而且这个列也是int类型,再合适建立索引不过了,
建立完索引后 这条查询语句的执行时间从原始的2s左右降低到0.4s左右。

另外的一个入库查询的操作 也是同样的排查方法。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐