转自:https://blog.csdn.net/jijianshuai/article/details/79128033html
Heap Dump的格式有不少种,并且不一样的格式包含的信息也可能不同。但总的来讲,Heap Dump通常都包含了一个堆中的Java Objects, Class等基本信息。同时,当你在执行一个转储操做时,每每会触发一次GC,因此你转储获得的文件里包含的信息一般是有效的内容(包含比较少,或没有垃圾对象了) 。java
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html#BABEHABG
oracle
jmap -dump:live,format=b,file=d:\dump\heap.hprof "pid"jvm
jcmd "pid" GC.heap_dump d:\dump\heap.hprofide
3.1 XX:+HeapDumpOnOutOfMemoryError工具
当OutOfMemoryError发生时自动生成 Heap Dump 文件。ui
这但是一个很是有用的参数,由于当你须要分析Java内存使用状况时,每每是在OOM(OutOfMemoryError)发生时。.net
3.2 -XX:+HeapDumpBeforeFullGC线程
当 JVM 执行 FullGC 前执行 dump。orm
3.3 -XX:+HeapDumpAfterFullGC
当 JVM 执行 FullGC 后执行 dump。
3.4 -XX:+HeapDumpOnCtrlBreak
交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照。
3.5 -XX:HeapDumpPath=d:\test.hprof
指定 dump 文件存储路径。
注意:JVM 生成 Heap Dump 的时候,虚拟机是暂停一切服务的。若是是线上系统执行 Heap Dump 时须要注意。
分析 Heap Dump 的工具均可以获取 Heap Dump 文件。 好比:jdk 自带的工具 jvisualvm。 其它工具:Eclipse memory analyzer(jmat)、JProfiler 等。