Java中查看堆里的信息

文章目录

  • 前言
    • 1 建议无脑的做一件事
    • 2 jmp命令
    • 3 导入 hprof 文件到Visual VM 中
    • 4 查看对象属性值

前言

日常工作中,我们可能会遇到这样的场景:

  • java项目发生了OOM;
  • 想知道在某种场景下,堆里的信息,从而确认一些代码功能是否正常;

类似的情况也是时有发生的,这个时候,我们需要借助java的 jmap命令去看看。
如果你想可视化的查看还得再加上一个插件 Visual VM。

我在这篇文章中,验证内存泄漏时,就使用了这个可视化工具,只能说相当好用:
https://blog.csdn.net/FBB360JAVA/article/details/128943206

插件有两种用法,如果你只是本地运行的话,建议直接在 IDEA 中安装插件,直接debug 运行就可以了。
本文重点是,如果项目是在Linux中跑着,你该怎么查看堆里的内容。

1 建议无脑的做一件事

建议在启动项目时,无脑的增加运行参数如下:

-XX:+HeapDumpOnOutOfMemoryError

这个命令的作用是,在发生 OOM 时,输出堆内信息。
这一点,在阿里巴巴的《码出高效:java开发手册》一书中的JVM篇章也有建议过。
这个命令,对于相隔数月才出现的OOM,或者偶发性的OOM,尤为重要。

另外,这个命令追加参数 HeapDumpPath,可以把堆信息存到文件中,生成 hprof类型的文件,而hprof类型的文件,是可以导入到Visual VM中,可视化查看的。

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=你的目录

2 jmp命令

首先我在本地启动一个SpringBoot项目,然后使用 jps 查看对应的应用端口。
随后使用 jmap 命令,将当前JVM堆内信息数据,导出为test.hprof文件。

C:\Users\Administrator\Desktop>jps
3920 RemoteMavenServer
15716 Launcher
7016 CustomLogStarterTestApplication
8184
8280 Jps
1308

C:\Users\Administrator\Desktop>jmap -dump:format=b,file=test.hprof 7016
Heap dump file created

因为我是在桌面打开的cmd命令框,所以文件生成在了桌面:
Java中查看堆里的信息_第1张图片

可以看到这个文件还是挺大的。

3 导入 hprof 文件到Visual VM 中

首先我们打开 Visual VM。点击 File -> Load
Java中查看堆里的信息_第2张图片

然后选择文件类型为 *.hprof,进而再选择你想导入的文件即可。
Java中查看堆里的信息_第3张图片
导入成功后的内容:
Java中查看堆里的信息_第4张图片

4 查看对象属性值

首先选择查看类的方式,选择了Packages的方式。
然后在Class Filter中搜索,因为我的包名里有 feng,所以按照这个搜,可以搜索到自己写的包和类。
然后就是想看哪个点哪个。
Java中查看堆里的信息_第5张图片

这里查看了CustomLogProperties 对象中的 enableCustomLog 的值,看到值是Boolean类型,为 true
Java中查看堆里的信息_第6张图片

你可能感兴趣的:(java练习,java,jvm,开发语言,visual,vm)