首页 > 其他分享 >如何在jvm dump出的堆文件中查看指定成员数据,或者全局变量

如何在jvm dump出的堆文件中查看指定成员数据,或者全局变量

时间:2023-03-17 17:37:16浏览次数:36  
标签:dump 查看 DemoApplication T2 内存 jvm 镜像 全局变量 属性

很多时候,当程序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回收的数据,则不一定能看到,因为会被回收的哟!

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

标签:dump,查看,DemoApplication,T2,内存,jvm,镜像,全局变量,属性
From: https://www.cnblogs.com/raychang/p/17227586.html

相关文章