Arthas使用案例(一)

说明:最近刚学会Arthas,就对自己开发的接口试了下。发现了几个接口RT较长,就相应做了优化。本文介绍使用Arthas优化接口的思路。

Arthas使用

Arthas使用可参考博主的这篇文章:Arthas使用及常用命令,也可参考官网提供的文档

排查接口

首先,找到需要操作的项目。大多数情况,公司服务器不会只部署一个项目,往往是其他分支、其他项目的程序都在一起运行,在这个情况下运行Arthas,就会出现大量相同名称的进程,让我们不知道哪个是我们需要的操作的项目。如下:

在这里插入图片描述

这时我们可以通过下面的命令找到我们需要的PID;

  • Linux:ps -ef | grep ‘关键字’
  • Windows:netstat -ano | findstr 端口号
  • Linux&Windows:jps(查看当前系统中运行的Java程序)

我们可以根据项目配置的端口号,或者如果是分布式项目,可通过配置的注册中心地址(可在项目配置文件中找到,端口号一般会和其他项目错开)来锁定这一组服务,如下:

在这里插入图片描述

这里第2列是PID,但需要注意,ps命令也会生成一个进程,所以如果你的项目有5个模块,那么查出来就是 2 × 5 + 1 = 11 行,每个项目占两个进程,一个是项目,一个是查询的命令,最后一个是总的查询命令进程。仔细看会发现,第1行第2列的PID(如上图的2465)是第2行第3列的值,下面的进程都是这样的,它们是成组出现的。

而我们进入Arthas窗口,输入的PID则是成组出现的下面这个,如上图的2467、2517、2644……,输入对应的PID,就可以对对应的项目进行排查;

分析

进入Arthas后,使用trace命令追踪接口,命令后面跟 全类名 方法 查看链路耗时(总耗时 499ms);

在这里插入图片描述

在最下面调用了Service层的代码,继续追踪Service实现类中的对应的方法,如果使用远程调用(如Dubbo、Feign实现,实现类不在该服务中,则需要退出找到实现类对应的服务模块,再继续排查,不然会提示找不到该类)如下:

在这里插入图片描述

总耗时578ms(与前面499ms不符,可能是网络波动),找到了其中一个方法,耗时占比最高,该方法的代码如下(已脱敏):

	/**
	* 学生关联教室,通过给学生赋classRoom值实现
	*/
    private void updateData(String classRoom, List<String> ids) {
        int index = 1;
        if (CollectionUtils.isNotEmpty(dataPaths)) {
            for (String s : ids) {
                User user = new User();
                user.setClassRoom(id);
                user.setId(s);
                user.setIndex(index);
                index++;
                userMapper.updateById(User);
            }
        }
    }

很明显,这里循环操作数据库了。可以考虑改为批量操作,只访问一次数据库,缩减处理时长;

优化

关于Mybatis批量更新对象数据,参考以下这篇文章,如果是MyBatis-Plus则有与之对应的方法;

修改完之后,再使用trace命令测试,查看成果,如下:

在这里插入图片描述

耗时203ms,缩短了一半,美滋滋;

总结

本文介绍了使用Arthas优化接口的实际使用,耗时长的方法很好定位,重点是如何找到自己要排查的项目、接口。

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
arthas 是一款开源的Java诊断工具,它主要用于分析、调试和监控Java应用程序。以下是关于如何使用 arthas 的指南: 1. 安装和启动:首先,我们需要安装 arthas。它支持多种安装方式,包括使用Maven,或者直接下载可执行的jar文件。安装完成后,可以使用命令行工具或者图形化的界面来启动 arthas。 2. 连接到目标应用程序:在启动 arthas 后,我们需要连接到目标应用程序。可以通过输入目标的进程ID或者应用程序的名称进行连接。arthas 会自动分析目标应用程序,并加载相关的类和方法。 3. 进行诊断和调试:连接成功后,可以开始进行诊断和调试操作。arthas 提供了丰富的命令和功能,包括查看线程状态、打印变量值、监控方法执行、动态修改类和方法等。通过这些功能,可以快速定位和解决应用程序的问题。 4. 了解应用程序的状态:arthas 还提供了一些用于了解应用程序状态的功能。比如,可以查看应用程序的内存使用情况、线程池的状态、类加载信息等。这些信息可以帮助我们了解应用程序的运行状况,以及可能存在的性能问题。 5. 监控和分析:arthas 还支持对应用程序的监控和分析。可以通过设置触发条件,来监控指定的方法执行。同时,arthas 会收集和展示方法的执行时间、调用次数等统计信息,帮助我们发现性能瓶颈和潜在的问题。 总结来说,arthas 是一个功能强大的Java诊断工具,它可以帮助我们快速定位和解决应用程序的问题。通过其丰富的命令和功能,我们可以进行诊断、调试、监控和分析操作,从而提高应用程序的可靠性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何中应

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值