项目实践之使用Arthas定位服务性能问题

前言

Arthas 是Alibaba开源的Java诊断工具

官方文档: https://arthas.aliyun.com/doc/

一、问题背景

本人负责的一个服务中有一个数据导出的功能,在数据量为5w条,大小约为120M时,导出时间约为5min,时间太慢,无法接受。

二、定位过程

1、梳理代码,寻找是否有可以优化的地方;

通过梳理代码,对代码中的分页查询进行了优化,但是提升不明显。

2、使用Arthas工具查看每个方法的耗时,查看是否有异常耗时;

因为我们的服务都是通过k8s托管,每个服务是一个pod,因此先将Arthas下载,复制进pod容器内,另外Athas运行还需要安装jdk,我们的环境只安装了jre。

准备工作就绪后,按照Arthas官方文档的步骤:

1、安装Arthas

sh install-local.sh

请添加图片描述

2、启动

java -jar arthas-boot.jar

选择需要诊断的java进程

3、使用 trace 命令打印方法耗时

trace 使用方法 : https://arthas.aliyun.com/doc/trace.html

请添加图片描述

如图所示(涉及敏感信息需要打码),初始化PropertiesUtil耗时较长,结合代码得出结论:

导出数据中有几个字段在数据库中是枚举字段,在代码中需要根据前台语言转化成对应的国际化语言,PropertiesUtil就是干这个事的,但是代码中在转化时每次都会去new一个PropertiesUtil对象,导致在导出5w条数据时代码会new 5w个PropertiesUtil对象,这导致了性能的极大浪费。

三、代码优化

通过第二步知道了问题所在,就可以有的放矢,我将PropertiesUtil这个类的实例化方式修改为单例模式,通过再次验证,导出时长优化到10s内,性能得到极大提升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值