开启 JFR 收集: 由于JFR是商用的,所以需要解锁Java程序的商业feature:
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder --JDK 1.8u40之前版本,需再jvm启动前添加参数
# JDK 1.8u40之后版本,不需要在启动的时候通过flag来解锁了,可以动态的解锁
jcmd 17206 VM.check_commercial_features
# 动态解锁 后可以运行许JFR采集任务
jcmd 17206 VM.unlock_commercial_features
![](http://upload-images.jianshu.io/upload_images/3575048-e18db512b8deb85e.png?imageMogr2/auto-orient/strip|imageView2/2/w/810/format/webp)
# JFR采集有两种方式:
固定时长的采集
持续不断的采集
# JFR采集策略 默认存储: /usr/local/jdk1.8.0_161/jre/lib/jfr
default.jfc 默认配置-开销很低,适用于一直运行,不会影响Java程序的性能。性能开销低于1%
profile.jfc 采集的事件力度更细(性能开销低于2%)
# JFR 采集实操: 假定 jvm pid是 17206
# 1.采集固定时长JFR任务
--查看当前执行的 JFR 任务
jcmd 17206 JFR.check
-- 采集 5min的 JFR任务(采集固定时长JFR任务)
jcmd 17206 JFR.start name=zhibi_jfr_online_test1 settings=profile delay=5s duration=5m filename="/home/work/apache-tomcat-7.0.85/zhibi_jfr_online_test1.jfr" compress=true
jcmd 17206 JFR.check
# 2.持续不断的采集JFR任务
- 持续采集 JFR 任务
jcmd 17206 JFR.start name=zhibi_jfr_test2 settings=profile delay=5s duration=0 compress=true
-手动转存 jfr 文件
jcmd 17206 JFR.dump name=zhibi_jfr_test2 filename="/home/work/apache-tomcat-7.0.85/zhibi_jfr_test2.jfr" compress=true
-停止持续采集 JFR 任务
jcmd 17206 JFR.stop name=zhibi_jfr_test2
![](http://upload-images.jianshu.io/upload_images/3575048-77e85022ee11bd8d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-25a51a680223df3c.png?imageMogr2/auto-orient/strip|imageView2/2/w/491/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-b337358f7410d67b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-b56984b0c85de023.png?imageMogr2/auto-orient/strip|imageView2/2/w/904/format/webp)
# 生成jfr收集文件后可导入JMC进行可视化问题定位 -good
打开效果试试看,主要分为以下部分: 标粗部分需重点关注
一般信息: jvm信息 & 系统属性
内存: 展示 内存占用(堆内+堆外)、GC原因、GC时间、对象分配[可按类、线程展示 按对象占用大小排序 & 可直接查看占用较大对象线程堆栈信息-快速定位可能存在问题的代码逻辑]、对象统计信息[展示增长最快对象]
代码: 类加载 / 类卸载 信息
线程: 概览[cpu占用率 & 活跃线程数 & 守护线程数 ]、热点线程、争用 [阻塞 & 受阻塞线程] 、等待时间[按等待时间排序线程]、线程转储[类似jstack功能]、锁定实例[定位死锁]
I/O: 文件IO+网络IO
系统: 进程 & 环境变量信息
事件: 按照事件维度展示 系统 发生 事件-展示方式 日志、图形、堆栈、直方图
1.一般信息:
![](http://upload-images.jianshu.io/upload_images/3575048-d461b9f13135362f.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-31c40bf7c49fb612.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-b92d03f56ea6418e.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-1d1ae1dff087eadd.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-b8d889c1757fdd8f.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
2.内存: 内存占用(堆内+堆外)、GC原因、GC时间、对象分配[可按类、线程展示 按对象占用大小排序 & 可直接查看占用较大对象线程堆栈信息-快速定位可能存在问题的代码逻辑]、对象统计信息[展示增长最快对象]
![](http://upload-images.jianshu.io/upload_images/3575048-69e8b53af8b48550.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-d0ea31b68234adaf.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-910db5f46d580088.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-9d608374c2b21cb0.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-ef96ee6625f0d2dd.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-5b3d945f183e74b2.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-954eb6edeae9262b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-776d866b307998d8.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
3.代码: 类加载、类卸载 信息 -重点关注
![](http://upload-images.jianshu.io/upload_images/3575048-5c9cbe148328b7b4.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-7aa9dd5d07a52f42.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-5cb383d169d8c745.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-3a524252b0154de5.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-e0df4f683e7cd3c9.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-82beb3965369ed04.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
4.线程: 概览、热点线程、争用、等待时间、线程转储、锁定实例
![](http://upload-images.jianshu.io/upload_images/3575048-9ac1ca6cc583f006.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-5fe76530a4769078.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-879020f13d44f907.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-27fd12d69f51d436.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-cc4e45ebb40f026f.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-5080a85e2b4591b6.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
5.I/O: 文件读取/写入 、 套接字读取/写入 -定位 IO 瓶颈(文件+网络) -重点关注
![](http://upload-images.jianshu.io/upload_images/3575048-350284f74e75b618.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-c2fa8b845eb074d1.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-40a50f3f9c0cc218.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
6.系统: 系统信息、 进程信息、环境变量信息
![](http://upload-images.jianshu.io/upload_images/3575048-eca0773af403b181.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-5587130008234d9a.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-858789ada27d7d9d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
7.事件: 按照事件维度展示 系统 发生 事件-展示方式 日志、图形、堆栈、直方图
![](http://upload-images.jianshu.io/upload_images/3575048-17224850653b7a09.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
![](http://upload-images.jianshu.io/upload_images/3575048-d07949ba1c64c474.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
参考:
https://jianyuan.me/2018/08/13/jcmd-record-jfr/#%E5%88%86%E6%9E%90JFR%E6%96%87%E4%BB%B6
作者:极简架构
链接:https://www.jianshu.com/p/a4d98b1dc3b7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。