很多时候,当程序OOM或者其他异常情况时,我们需要搞清楚当时应用内部数据情况,所有某些时候我们需要查看当时内存镜像中某些成员变量的值。
比如查看当时内存实例中数据库账号,密码是否正确等等。
直接进入正题,我们首先搭建一个测试使用的springboot项目,除了基本模板代码外,剩余代码如下:
我们预期目标为通过镜像实例去查看DemoApplication
中三个属性:
- tt
- tt1
- bb
以及 T2 对象中的静态属性:bbb
项目搭建成功后,启运行项目,接着使用命令导出运行中的应用的内存镜像
导出命令:
jmap -dump:format=b,file=文件名.hprof <进程ID>
接下来使用分析工具,这里使用:MemoryAnalyzer, 大家没有可以自行去下载。
工具大概步骤为:
1.使用工具载入镜像文件
载入内存镜像后点击箭头所示的统计图表
接下来咱们先查看静态属性 T2.aaa
:
- 首先使用过滤器筛选出目标类
T2
,箭头所示部分输入T2
接着回车,筛选结果就出来包含T2的所有筛选结果:
点击Go into
后 即可看到bbb属性的值了,如下图:
接下来我们查看DemoApplication
中的两个属性值:
还是老样子,首先使用过滤器筛选出目标类DemoApplication
示例如下:
这里可以看到有两个类,原因是因为有一个是cglib代理生成的,这个不要管,点击DemoApplication
即可看到左侧类的属性, 此时老规矩,要查看那个属性就右键goto进去,即可查看到对应变量的值。
最后值得一提的是,如果是一些会被GC回收的数据,则不一定能看到,因为会被回收的哟!
好了,分享结束了。感谢大家!
标签:dump,查看,DemoApplication,T2,内存,jvm,镜像,全局变量,属性 From: https://www.cnblogs.com/raychang/p/17227586.html