31 | Java虚拟机的监控及诊断工具(GUI篇)
郑雨迪
该思维导图由 AI 生成,仅供参考
今天我们来继续了解 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
《深入拆解 Java 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(15)
- 最新
- 精选
- 钱JVM GUI监控和检测工具 1:MAT 2:JMC 这两个没怎么用过,回头下载、安装、使用下,国庆回家了,雨迪老师还在匀速的前进,是不是课程是提前编写好,录制好,然后定时放出?无论怎么非常感谢,跟着老师确实学习了不少东西,最后两天补上拉下的课程。
作者回复: 提前一周写好的。极客的小编辛苦些,需要加班较稿。
2018-10-067 - 遇见未来老师您好,openjdk可以用JFR嘛,配置了好久没成功,如果不能有没有类似的工具推荐,谢谢😁
作者回复: Java 11开始才进OpenJDK的
2018-10-26 - Maxwell能否分享下实际工作中发生内存泄露,使用MAT分析和定位的案例呢?2018-12-2114
- fuyu要是能举几个例子结合工具排查就更好了。2018-10-016
- 阿武国庆也推送,大写的服。👍👍2018-10-016
- 小文同学MAT是一个非常有用的工具,已经用它成功排查过内存泄露的问题。2018-10-025
- neohope之前在项目上遇到了这种情况:我们有一个服务专门处理XML,有明显的内存泄漏,运行一天后内存会有几十G,导出的内存快照也是几十G,但压缩后只有几百M。用MAT查看内存快照,发现都是空的。现在回想起来,是不是我们用的XML类库,用了直接内存?那直接内存的话,用什么方法可以查看内存泄漏的情况呢?2019-09-074
- 啸疯Idea中有jprofile插件可以用2021-12-302
- Geek_e2a822最好有点实际项目中问题定位的示例,否则整篇这样的介绍很鸡肋2020-01-141
- Roway能否分享下实际工作中发生内存泄露,使用MAT分析和定位的案例呢?2019-06-2611
收起评论