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中的代码也已经预编译和优化。

相关推荐
东山絮柳仔6 小时前
关于数据库服务器资源降配的效能分析
性能优化·mysql 管理
不吃香菜学java6 小时前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
captain3767 小时前
事务___
java·数据库·mysql
北漂Zachary7 小时前
四大编程语言终极对比
android·java·php·laravel
小江的记录本7 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
嗑嗑嗑瓜子的猫8 小时前
Java!它值得!
java·开发语言
2401_895521349 小时前
【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现
java·后端·spring
皮卡蛋炒饭.9 小时前
线程的概念和控制
java·开发语言·jvm
一只大袋鼠10 小时前
MyBatis 入门详细实战教程(一):从环境搭建到查询运行
java·开发语言·数据库·mysql·mybatis
程序员老邢10 小时前
【人生底稿・番外篇 05】我的电影江湖:从录像带时代,到港片陪伴的青春岁月
java·程序人生·职场发展·娱乐