JVM参数设置
在JAVA_OPTIONS变量中增加参数
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}
说明:
- -XX:+HeapDumpOnOutOfMemoryError
当JVM发生OOM时,自动生成DUMP文件
- -XX:HeapDumpPath= ${目录}
存放DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认为:java_<pid><date><time>.hprof
所以在jvm启动参数加上以上配置是为了在项目发生oom时,输出堆的内存快照,用于后续分析定位
hprof文件分析
hprof文件需要用内存分析工具分析,如mat、jdk自带的jvisualvm.exe
本人习惯用mat工具 mat下载
-
载入hprof文件
image.png -
Histogram
可以右键某一项查看类实例并通过Path to GC Roots快速找到某个对象的 GC Root
image.png -
Leak Suspects
通过分析线程堆栈信息,可以很好定位内存泄漏的位置
image.png -
Dominator Tree
以实例对象的维度展示当前堆内存中Retained Heap占用最大的对象,以及依赖这些对象存活的对象的树状结构
image.png -
Thread Overview
可以查看线程对象/线程栈信息、线程名、Shallow Heap、Retained Heap、类加载器、是否Daemon线程等信息
image.png
image.png
网友评论