项目实践之使用Arthas定位服务性能问题
前言Arthas 是Alibaba开源的Java诊断工具官方文档: https://arthas.aliyun.com/doc/一、问题背景本人负责的一个服务中有一个数据导出的功能,在数据量为5w条,大小约为120M时,导出时间约为5min,时间太慢,无法接受。二、定位过程1、梳理代码,寻找是否有可以优化的地方;通过梳理代码,对代码中的分页查询进行了优化,但是提升不明显。2、使用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)