Java如何使用JFR(Java Flight Recorder)飞行记录分析代码瓶颈

JFR

Java JFR的全称是Java Flight Recorder。这是Java开发工具包(JDK)中的一个功能强大的性能分析和故障排查工具。
它需要配合JMC(JDK Mission Control)工具来分析收集的记录数据。

如何开启记录器

  1. 查看java程序进程号
    在这里插入图片描述
  2. 使用jdk命令jcmd解锁商业功能。在JVM启动时,如果使用-XX:+UnlockCommercialFeatures参数(默认false),则可以在程序退出时打印原生内存分配信息。这种打印信息的方式主要是为了调试和优化目的。
# jcmd [进程号] VM.unlock_commercial_features;
jcmd 42 VM.unlock_commercial_features;
  1. 使用jdk命令jcmd记录飞行数据
# jcmd [进程号] JFR.start name=[本次记录名称] duration=[记录秒数]s filename=[将记录数据保存到文件名].jfr;
# 记录时间不宜过长,jfr文件过大会导致jmc工具无法打开并分析
jcmd 42 JFR.start name=p-01 duration=420s filename=logs/p-01.jfr;

如何分析记录数据

  1. 下载上一步记录的p-01.jfr文件

  2. 使用jmc工具打开
    jmc工具界面

  3. 首先查看“自动分析结果”,了解jvm概要信息,重点关注50分以上的项目
    在这里插入图片描述

  4. 根据分析提示逐条分析,一般我们比较关注的指标是:

    • 线程,分析线程数量是否合理。
      在这里插入图片描述

    • 内存,分析是否存在内存泄露等。
      在这里插入图片描述

    • 锁定对象,分析代码瓶颈(哪些代码执行时间过长)。
      在这里插入图片描述

    • 垃圾收集,GC是否正常、耗时是否过长等。
      在这里插入图片描述

结论

  1. 根据分析结果做相应处理
  2. 如:内存存在泄露,则分析“活动对象”常驻内存的是哪些引用
  3. 如:“锁定对象”时间过长,则分析是哪些代码在锁定这些对象,进一步分析对应代码如何优化
  4. 如:GC不正常,则分析jvm参数是否应该调整,垃圾回收期是否修改为更高效的收集器等
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eddy5x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值