深入拆解 Java 虚拟机
郑雨迪
Oracle 高级研究员,计算机博士
87446 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
模块四:黑科技 (3讲)
深入拆解 Java 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

31 | Java虚拟机的监控及诊断工具(GUI篇)

JMC的JFR插件
使用jcmdJFR.*子命令
命令行参数
取样事件
计时事件
持续事件
瞬时事件
MBean Server
启用方式
事件类型
支配树
直方图
Retained heap
Shallow heap
使用jmap工具
新建一个Java虚拟机来运行Attach API
使用Attach API
JMC功能
Java Flight Recorder (JFR)
包括的视图
计算对象占据内存的两种方式
三种获取方式
获取堆的二进制快照
Java Mission Control (JMC)
eclipse MAT
Java虚拟机的监控及诊断工具

该思维导图由 AI 生成,仅供参考

今天我们来继续了解 Java 虚拟机的监控及诊断工具。

eclipse MAT

在上一篇中,我介绍了jmap工具,它支持导出 Java 虚拟机堆的二进制快照。eclipse 的MAT 工具便是其中一个能够解析这类二进制快照的工具。
MAT 本身也能够获取堆的二进制快照。该功能将借助jps列出当前正在运行的 Java 进程,以供选择并获取快照。由于jps会将自己列入其中,因此你会在列表中发现一个已经结束运行的jps进程。
MAT 获取二进制快照的方式有三种,一是使用 Attach API,二是新建一个 Java 虚拟机来运行 Attach API,三是使用jmap工具。
这三种本质上都是在使用 Attach API。不过,在目标进程启用了DisableAttachMechanism参数时,前两者将不在选取列表中显示,后者将在运行时报错。
当加载完堆快照之后,MAT 的主界面将展示一张饼状图,其中列举占据的 Retained heap 最多的几个对象。
这里讲一下 MAT 计算对象占据内存的两种方式。第一种是 Shallow heap,指的是对象自身所占据的内存。第二种是 Retained heap,指的是当对象不再被引用时,垃圾回收器所能回收的总内存,包括对象自身所占据的内存,以及仅能够通过该对象引用到的其他对象所占据的内存。上面的饼状图便是基于 Retained heap 的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了Java虚拟机监控及诊断工具,重点介绍了eclipse MAT和Java Mission Control。eclipse MAT是一个能够解析Java虚拟机堆的二进制快照的工具,能够获取堆的二进制快照,并展示对象占据内存的饼状图、直方图和支配树等视图。同时,MAT还能自动匹配内存泄漏中的常见模式,并汇报潜在的内存泄漏问题。而Java Mission Control则介绍了Java Flight Recorder(JFR),它是一个高效的profiling工具,能够记录运行过程中的各种事件,并且在默认配置下性能开销很小。JFR的启用方式有三种,分别是在运行目标Java程序时添加`-XX:StartFlightRecording=`参数,持续收集数据直至进程退出,并且不主动保存JFR收集得到的数据。文章内容涵盖了Java虚拟机监控及诊断工具的重要内容,对于需要了解这方面知识的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Java 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • JVM GUI监控和检测工具 1:MAT 2:JMC 这两个没怎么用过,回头下载、安装、使用下,国庆回家了,雨迪老师还在匀速的前进,是不是课程是提前编写好,录制好,然后定时放出?无论怎么非常感谢,跟着老师确实学习了不少东西,最后两天补上拉下的课程。

    作者回复: 提前一周写好的。极客的小编辛苦些,需要加班较稿。

    2018-10-06
    7
  • 遇见未来
    老师您好,openjdk可以用JFR嘛,配置了好久没成功,如果不能有没有类似的工具推荐,谢谢😁

    作者回复: Java 11开始才进OpenJDK的

    2018-10-26
  • Maxwell
    能否分享下实际工作中发生内存泄露,使用MAT分析和定位的案例呢?
    2018-12-21
    14
  • fuyu
    要是能举几个例子结合工具排查就更好了。
    2018-10-01
    6
  • 阿武
    国庆也推送,大写的服。👍👍
    2018-10-01
    6
  • 小文同学
    MAT是一个非常有用的工具,已经用它成功排查过内存泄露的问题。
    2018-10-02
    5
  • neohope
    之前在项目上遇到了这种情况:我们有一个服务专门处理XML,有明显的内存泄漏,运行一天后内存会有几十G,导出的内存快照也是几十G,但压缩后只有几百M。用MAT查看内存快照,发现都是空的。现在回想起来,是不是我们用的XML类库,用了直接内存?那直接内存的话,用什么方法可以查看内存泄漏的情况呢?
    2019-09-07
    4
  • 啸疯
    Idea中有jprofile插件可以用
    2021-12-30
    2
  • Geek_e2a822
    最好有点实际项目中问题定位的示例,否则整篇这样的介绍很鸡肋
    2020-01-14
    1
  • Roway
    能否分享下实际工作中发生内存泄露,使用MAT分析和定位的案例呢?
    2019-06-26
    1
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部