JMC诊断工具
1 JDK8 使用 jcmd 代替以前版本中的jstack
, jinfo
, and jmap
工具使用
2JMC 诊断,JMC是由JMX,JFR和其它几个可下载功能插件共同组成,其中:
a.JMX起到监控和管理作用。能够连接运行中的jvm,能实时的收集和显示一些关键的属性
b. JFR性能分析
c. 在jdk8环境下,可以触发用户自定义的行为和规则
d.JMC的其它插件 如: - WLS, DTrace[类似JFR], JOverflow[分析 heap情况]
程序增加参数 -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
3 JFR 有2种录制方案
I 使用 Continuous Recordings,对应用程序不会有太多的性能影响。但是没有heap statistics or allocation profiling相关信息,对调试罕见的错误非常有用。
II 使用Profiling Recordings,会获取到很多有用的信息,对应用程序会产生较大的影响,甚至达到2%的影响,主要用在以下3个方面
a 分析 大对象创建和方法调用情况
b 查找 使用越来越多内存的class,可能导致内存泄漏。即不能正确回收内存的class
c 查找 类似 synchronized 导致的 性能瓶颈
4 有三种方法启动JFR
I Start a profiling recording
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=delay=20s,duration=60s,name=myrecording,filename=C:\TEMP\myrecording.jfr,settings=profile MyApp
II Start a continuous recording
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=default recording=true,disk=true,repository=/tmp,maxage=6h,settings=default MyApp
III 使用 JCMD Utility 启动
jcmd pid help
jcmd pid JFR.start name=MyRecording settings=profile delay=20s duration=2m filename=C:\TEMP\myrecording.jfr
5 Native Memory Tracking
I 应用设置 -XX:NativeMemoryTracking=summary or -XX:NativeMemoryTracking=detail
II jcmd <pid> VM.native_memory summary or
jcmd <pid> VM.native_memory detail
.
III jcmd <pid> VM.native_memory baseline
jcmd <pid> VM.native_memory summary.diff or jcmd <pid> VM.native_memory detail.diff
6 java -agentlib:hprof=help
I 单个类的性能分析
java -agentlib:hprof=heap=sites ToBeProfiledClass
javac -J-agentlib:hprof=heap=sites ToBeProfiledJAVA[部分性能]
II 配置成整体项目运行
-agentlib:hprof=heap=dump,cpu=samples,format=b
如导出以下文件:java.hprof
7 Jhat 工具使用
启动 jhat java.hprof
8 jstat 工具
jstat -help / jstat -options
如:jstat -gcutil pid 1s 10
9 jconsole 远程配置
-Djava.rmi.server.hostname=192.168.2.3
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
10 Detect Deadlocks
增加参数 -XX:+PrintConcurrentLocks
heap summary:-XX:+PrintClassHistogram 打出详情