使用jdk自带的VisualVM分析hprof堆转储文件
<div id="content_views" class="markdown_views prism-atom-one-dark">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<h3><a name="t0"></a><a id="_3"></a>一、堆转储文件</h3>
堆转储文件(heap dump):是JVM 的某个时间点、Java 进程的内存快照。里面包含了当时内存中还没有被 full GC 回收的所有对象和类信息。
二、手动生成堆转储文件的命令
jmap -dump:format=b,file=<filename.hprof> <pid>
- 1
这将生成一个hprof后缀的文件,其中:
- format=b,表示转储为二进制格式。
- file 指定转储文件的路径,后缀为 hprof。
- pid 表示进程 ID。
三、自动生成堆转储文件
JVM 中配置如下
-XX:+HeapDumpOnOutOfMemoryError
- 1
四、VisualVM分析hprof堆转储文件
可以使用 jdk 自带的VisualVM工具来进行分析(jdk高于1.8或1.8晚期的 jdk 已经没有自带了,可以去 VisualVM官网下载安装)
1.java安装目录下的bin目录下双击打开 jvisualvm.exe
2.选择文件点击装入,然后加载要分析的hprof文件
3.选择类,然后对堆内存大小进行排序,双击可以查看具体类型的实例内存占用情况
4.双击具体的实例可以查看该实例的内容和占用的大小,可以选择全部展示或者把该内容保存为一个txt文件