OOM问题排查

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容