Java后端开发性能优化排查思路及工具

Java后端开发性能优化排查思路及工具

性能优化排查工具

JFR及cpu火焰图

Java Flight Record 提供一个低开销的数据收集框架,用于对 Java 应用程序和 HotSpot JVM 进行故障排除。Flight Recorder 记录源自应用程序、JVM和操作系统的事件

使用async-profiler,https://github.com/async-profiler/async-profiler,可以很方便获取火焰图和jfr。

将获取到的jfr文件,使用jdk mission control工具打开,可以获取类似下图的分析结果。

async-profiler获得cpu火焰图后,火焰图展示方法级别的响应时长,便于定位耗时较长的具体方法。

arthas

Arthas (https://arthas.aliyun.com/doc/commands.html) 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

使用arthas的trace - 方法内部调用路径,并输出方法路径上的每个节点上耗时。

性能优化思路点

排查方向 影响级别 原因 改进思路 改进后提升 备注
存在第三方dubbo、http等需要网络传输的接口的调用 缓存 需注意缓存击穿、穿透、雪崩问题
剔出循环、递归
线程并发 需注意并发问题
更改为redis、mysql等方式传输
数据库,慢查询、连接池等 优化数据库查询语句
减少数据库连接次数,如使用批插入等 较大
IO操作 缓存 需注意缓存击穿、穿透、雪崩问题
线程并发 需注意并发问题
nio
深层递归 改为循环 较大
xml、json、beanutils等反射、反序列化 底层都会执行反射 减少不必要字段 较大
使用mapstruct代替beanutils.beancopy 较大
使用Protobuf、Kryo等代替json 较大
资源竞争 拆解死锁,使用超时机制 巨大
减少锁竞争,减小锁范围 较大
频繁GC 略小 减少重复对象创建 略小
切换GC算法
Stream流 略小 Stream中会对迭代器中的对象进行copy 使用for循环代替,减少copy次数 略小
List等迭代器遍历 略小 对不会重复的,使用set等哈希代替 略小

冷启动------首次请求延迟

JIT编译器在执行时即时编译字节码到机器代码,从而提高程序的运行效率。对于热点代码,可以在上线前先预热,确保JIT已经编译和优化这些代码。

对于使用了网络的接口调用,有时也需要预热,确保tomcat中的代码也已经预编译和优化。

相关推荐
程序员阿鹏2 小时前
分布式事务管理
java·开发语言·分布式
爱学大树锯2 小时前
【594 · 字符串查找 II】
java·开发语言·算法
zhixingheyi_tian2 小时前
Yarn 之 run job
java·开发语言·前端
2501_916766542 小时前
【Java】代理模式---静态代理与动态代理
java·开发语言·代理模式
纸带2 小时前
USB CDC 配置描述符中对比两个CDC设备配置
java·网络·windows
缺点内向2 小时前
Java:轻松实现 Excel 文档属性添加
java·开发语言·excel
pangtao20252 小时前
【瑞萨RA × Zephyr评测】看门狗
java·后端·spring
HappyBoy_20192 小时前
MybatisPlus IPage分页查询工具类
java·开发语言
小徐Chao努力2 小时前
【Langchain4j-Java AI开发】10-框架集成(Spring Boot & Quarkus)
java·人工智能·spring boot