与大牛一个工具的距离&JAVA性能分析
Java性能分析工具之JProfilerLinux系统性能分析windows系统性能分析JProfile工具分析Linux系统性能分析可以通过vmstata、iostat、prstat、top等命令进行查看。windows系统性能分析可以通过typeperf等指令,当然也可以借助很多图化化的工具来进行分析。如下文介绍的jprofilertypeperf -si 1 "\Syste...
与大牛一个工具的距离&Java性能分析
一、Linux系统性能分析
可以通过vmstata、iostat、prstat、top等命令进行查看。
二、windows系统性能分析
可以通过typeperf等指令,当然也可以借助很多图化化的工具来进行分析。如下文介绍的jprofiler
typeperf -si 1 "\System\Processor Queue Length 显示CPU队列当前长度
三、JProfile工具分析
3.1安装
JProfile可以在window和Linux使用,其安装都非常方便,但需要注意的是被监控的应用要修改其启动的JAVA_OPTS参数,在Window中可以通过JProfile工具直接attach应用(或者借助IDE工具),会自动设置启动VM参数,例如:
-agentpath:D:\Program Files\jprofiler11\bin\windows-x64\jprofilerti.dll=port=34433 -Dfile.encoding=GBK
程序的执行窗口自动打印:
JProfiler> Protocol version 61
JProfiler> JVMTI version 1.1 detected.
JProfiler> Java 8 detected.
JProfiler> 64-bit library
JProfiler> Listening on port: 34433.
JProfiler> Enabling native methods instrumentation.
JProfiler> Can retransform classes.
JProfiler> Can retransform any class.
JProfiler> Native library initialized
JProfiler> VM initialized
JProfiler> Waiting for a connection from the JProfiler GUI ...
JProfiler> Using instrumentation
JProfiler> Time measurement: elapsed time
JProfiler> CPU profiling enabled
工作效果如图所示:
在Linux上的使用,需要拷内必要的库文件
cp /opt/openans-ncc-pce/jprofiler/libstdc++.so.6.0.19 /lib64/
chmod 755 /lib64/libstdc++.so.6.0.19
ln -s /lib64/libstdc++.so.6.0.19 /lib64/libstdc++.so.6
配置JAVA参数
-agentpath:/opt/openans-ncc-pce/jprofiler/bin/linux-x64/libjprofilerti.so=port=8849,nowait
目前应用部署多是采用Docker,需要记得将内部调试端口暴露,这样则可以方便通过IP和端口远程连接。
3.2内存分析
ps.本节的Jprofile版本为9.2.1
特别地针对OOM的问题定位,为了可以检查出是哪些对象无法被回收且不断增加,操作步骤:
- 执行Run GC先清理一遍内存
- 执行Mark Current Values,通过标记便于查看哪些对象在增加
- 执行Start Recordings开始内存记录,执行这步的主要目的是为下面Heap Walker设置一个监控区间,方便分析
- 开始跑可能出现OOM的业务流程,完成后再次执行Run GC,过滤出真正无法回收对象
- 执行Stop Recordings,停止内存记录
- 观察无法回收对象,切入Heap Walker进一步分析,如下图
HeapWarker 会分析内存中的所有对象,包括对象的引用、创建、大小和数量 - 最后通过该对象的引用分析最终在业务代码何处申请或创建,进而确定OOM位置
双击对象,弹出对话框中
- incoming:表示显示这个对象被谁引用
- outcoming:表示显示这个对象引用的其他对象
- Allocations:表示对象是如何创建出来的(可以从创建方法开始检查,检查所有用到该对象的地方,直到找到泄漏位置)
简单举例本人工作中的分析:
3.3CPU分析
使用CPU views中的Call Tree可以监测到某个方法执行的全部耗时过程,用于分析性能热点
- Call Tree 调用树:较为直观地看到方法执行调用栈
- Hot Spots 热点
- Call Graph 调用图
- Method Statistics 方法统计:通过快照分析一段时间内相关方法执行统计情况
- Complexity Analysis 复杂度分析
- Call Tracer 调用跟踪
3.3DB分析
JDBC探针具有记录JDBC连接泄漏
通过执行业务接口,可以查看到对应的SQL语句和相关耗时
更多推荐
所有评论(0)