Java性能分析工具

2021-06-17 fishedee 后端

0 概述

Java性能分析工具

1 JProfiler

是Java下面最好的在线性能分析工具,它能很好地分析出系统的性能瓶颈在哪里

1.1 安装

L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620 
L-Larry_Lau@163.com#36573-fdkscp15axjj6#25257 
L-Larry_Lau@163.com#5481-ucjn4a16rvd98#6038 
L-Larry_Lau@163.com#99016-hli5ay1ylizjj#27215 
L-Larry_Lau@163.com#40775-3wle0g1uin5c1#0674 

L-Larry_Lau@163.com#7009-14frku31ynzpfr#20176 
L-Larry_Lau@163.com#49604-1jfe58we9gyb6#5814 
L-Larry_Lau@163.com#25531-1qcev4yintqkj#23927 
L-Larry_Lau@163.com#96496-1qsu1lb1jz7g8w#23479 
L-Larry_Lau@163.com#20948-11amlvg181cw0p#171159 

官网这里下载JProfiler 9.2版本。JProfiler 9.2的注册码网上到处都有,随便用。但是到了JProfiler 10以后的版本就很难破解了,淘宝也没有办法。

然后在IDEA里面安装JProfiler插件

1.2 启动

1.2.1 新程序Profile

Scanner input = new Scanner(System.in);
input.next();

对于那些非长期运行的程序,我们要在程序底部加上这一句,避免程序过早结束而无法Profile

然后在启动里面选择Profile App就可以了

1.2.2 已有程序Profile

选择Start Center

选择Quick Attach就可以绑定分析已经在运行的程序了

1.3 内存

这里有一个内存泄漏分析的例子

进入Live Memory,我们看到:

  • All Objects,当前的内存类型与大小
  • Allocation Call Tree,内存分配是由哪个方法来触发的
  • Allocation Hot Spots,哪个方法分配的内存最多

1.3.1 内存泄漏

先打开All Objects选项,然后选择Mark Current,就会设置当前的内存情况

对程序进行压力测试以后,选择Freeze View,然后点击Difference,就可以看到当前的内存情况。

正常情况下,没有GC的话就会有内存新增,红色条部分的新增的内存大小。

右键选择Show Selection In Heap Walker

进入Heap Walker方法,我们就能看到这个界面,我们再次选择Selected Instances

选择Incoming References分析

我们就能知道这个int[]对象是谁来引用它的,在Heap Walker我们得到了这个结果。

当然,这个方法并不能真的找到内存泄漏的位置,因为GC没有执行当然内存会增加,我们可以在压力测试以后,手动进行Run GC操作。然后去看哪些内存一直在内存中而没有去释放,就知道内存泄漏的地方在哪里了

1.3.2 内存分配瓶颈

选择Allocation Call Tree菜单,然后点击Record Memory按钮

进行压力测试以后,我们点击Stop Memory按钮和Calculate按钮

我们就能知道每个URL分配的内存数量

如果选择左侧的Allocation Hot Spots的按钮,它还会自动聚合不同的方法分配的内存数量

1.4 CPU

打开CPU按钮,选择Record CPU

压力测试以后,选择Stop CPU

这个时候就能看到不同方法的执行时间了

我们还可以右键选择Show Call Graph

来图形展示CPU的瓶颈在哪里

1.5 JDBC

选择Record Probe JDBC按钮

经过压力分析以后,选择Stop Probe JDBC

然后再选择Call Tree,就能看到每个接口触发的SQL次数,以及这些SQL是什么内容

1.6 总结

JProfiler可以说是在线性能分析的不二之选,功能强大,图形界面方便。但是对于线上运行的服务器程序,JProfiler的性能损失(overhead)太大,不建议用。

线上运行的性能分析程序,我们建议用TProfiler来做性能分析,但是TProfiler在1.0版本以后就没有更新,不支持Spring Boot 2.0以后的版本,所以也不知道怎么做了。

2 Arthas

相关文章