35 | 加餐5:分析定位Java问题,一定要用好这些工具(二)
该思维导图由 AI 生成,仅供参考
使用 MAT 分析 OOM 问题
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何使用Java工具来分析和定位Java程序中的问题。首先介绍了使用JVM堆转储工具MAT来分析OOM(内存溢出)问题,以及如何使用故障诊断工具Arthas来分析和定位高CPU问题。对于OOM问题,作者建议使用MAT工具进行分析,通过支配树和直方图功能来查看消耗内存最大的类型,定位内存泄露的原因,并配合查看对象属性的功能来帮助理清程序逻辑和参数。作者还详细介绍了使用MAT工具的具体操作步骤,包括查看对象引用链、查看线程栈等功能。通过实际案例分析,读者可以了解如何从堆转储中还原出程序的真实代码,定位程序中的内存问题。整体而言,本文通过具体的案例和操作步骤,帮助读者深入理解了如何利用Java工具来分析和解决程序中的问题。 Arthas是一款强大的Java诊断工具,具有人性化的界面和功能强大的特点。通过实际案例,文章展示了如何使用Arthas来定位高CPU问题,包括使用dashboard、thread、jad、watch、ognl等命令来分析问题。通过这些命令,读者可以快速定位问题,反编译相关代码,观察方法入参,并通过ognl命令来运行表达式,直接查询类的字段。文章还分享了一个开发同学使用Arthas定位OOM问题的案例,强调了使用正确的工具和方法可以快速定位问题根因。最后,文章提出了一些思考与讨论的问题,引发读者对于工具使用的思考和交流。 总的来说,本文通过介绍MAT和Arthas工具的使用方法和实际案例,帮助读者了解如何利用这些工具来分析和解决Java程序中的内存和CPU问题,为读者提供了一种快速定位和解决Java程序问题的方法。
《Java 业务开发常见错误 100 例》,新⼈⾸单¥59
全部留言(16)
- 最新
- 精选
- QQ怪arthas的确很强,线上排查还真的爽,点赞
作者回复: 是的
2020-04-3014 - 何嘉杰_JessyHo老师咨询一下,生产应用都打包成 docker 镜像跑在 k8s 集群中,镜像里面往往只有 jre ,jdk的工具乃至很多 linux 的命令都没有。这种情况下,如果出了异常,要怎样排查问题呢
作者回复: 可以把jdk的工具复制到镜像使用,网上有很多文章介绍如何操作,此外可以利用监控工具排查问题或者转存堆,不一定非得使用jdk工具
2020-05-0411 - Demon.LeeF**k, F**k, 太 powerful了,对于我这种小白来说,真的手把手教了,赶紧practice。哎,我工作10年了,以前写写C,最近3年才写java,真的越学越发现自己啥也不会,追赶呀,追赶!老师们,辛苦了。
作者回复: :)
2020-04-3010 - devin.ouMAT发现Unreachable Objects Histogram的char[]占了3.6G, byte[]占了2.2G. 而且运行一段时间后, 这个Unreachable空间还会增长直接监控报警后手工重启应用. 这个与配置 -Xmx10g -Xms3g, 导致了GC不回收吗? 是否要将-Xms改少到1G, 才会GC回收. 或者有别的优化方式.
作者回复: 1、xmx和xms建议一致 2、gc启动时机是有参数配置的,内存不占用到一定的比例不会启动gc,比如cms的XX:CMSInitiatingOccupancyFraction,g1的XX:InitiatingHeapOccupancyPercent
2020-05-1227 - coffee老师,请教您一个问题,如果hprof堆转储文件过大,mat打不开,用什么办法来定位oom问题?
作者回复: mat可以设堆大小
2020-04-306 - Geek_3b1096越觉得自己菜谢谢老师
作者回复: 不客气
2020-05-113 - NARUTOmetaspace oom原因比较好定位,就是定位到根本的代码行比较困难
作者回复: 参考 https://blog.gceasy.io/2022/08/23/inspect-the-contents-of-the-java-metaspace-region/ 定位到行是困难的,但至少可以定位到哪个类在重复加载
2023-10-14归属地:湖南 - 飞鱼老师,请问下,在线程池中使用threadlocal,作为二级缓存,但是有地方在使用后未及时清理该线程变量,导致内存泄露,用mat分析了下,但是没有详细引用链路,像您例子中那样可以看到具体是由那个类引发的,能帮忙给点意见吗?谢谢
作者回复: 我回头测试一下,https://github.com/JosephZhu1983/java-common-mistakes/blob/master/src/main/java/org/geekbang/time/commonmistakes/concurrenttool/threadlocal/Jietu20200710-113641.jpg 可以看到
2020-07-10 - viviArthas的代码热替换功能确实很香 但是还是有两个小问题 一个是没有权限控制 任何人都可以进行代码热替换操作 另一个就是代码热替换如果改错了 问题就不太好排查了2020-04-3014
- 程序员小跃以前用Eclipse 开发Android App的时候,遇到一些OOM,会跟着师傅一起用 MAT 排查,从不会用到使用,到一直使用一直爽的状态,排查了好多疑难杂症,真的很棒。老师讲的这个,又给我复习了一遍。 Arthas 真的强大,看评论去就懂了,所以感谢老师提供一个简短的教程,干就完事了2020-10-313