如何在JAVA dump文件/内存镜像中查找变量的值

很多时候,当程序OOM或者其他异常情况时,我们需要搞清楚当时应用内部数据情况,所有某些时候我们需要查看当时内存镜像中某些成员变量的值。

比如查看当时内存实例中数据库账号,密码是否正确等等。

直接进入正题,我们首先搭建一个测试使用的springboot项目,除了基本模板代码外,剩余代码如下:
在这里插入图片描述

我们预期目标为通过镜像实例去查看DemoApplication中三个属性:

  • tt
  • tt1
  • bb
    以及 T2 对象中的静态属性: bbb

项目搭建成功后,启运行项目,接着使用命令导出运行中的应用的内存镜像
导出命令:

 jmap -dump:format=b,file=文件名.hprof <进程ID>

接下来使用分析工具,这里使用:MemoryAnalyzer, 大家没有可以自行去下载。
工具大概步骤为:

1.使用工具载入镜像文件

载入内存镜像后点击箭头所示的统计图表
在这里插入图片描述

接下来咱们先查看静态属性 T2.aaa

  1. 首先使用过滤器筛选出目标类T2,箭头所示部分输入T2
    在这里插入图片描述
    接着回车,筛选结果就出来包含T2的所有筛选结果:
    在这里插入图片描述
    点击 Go into 后 即可看到bbb属性的值了,如下图:

在这里插入图片描述

接下来我们查看DemoApplication中的两个属性值:
还是老样子,首先使用过滤器筛选出目标类DemoApplication示例如下:
在这里插入图片描述

这里可以看到有两个类,原因是因为有一个是cglib代理生成的,这个不要管,点击DemoApplication即可看到左侧类的属性, 此时老规矩,要查看那个属性就右键goto进去,即可查看到对应变量的值。

最后值得一提的是,如果是一些会被GC回收的数据,则不一定能看到,因为会被回收的哟!

好了,分享结束了。感谢大家!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值