VisualVM分析一次OOM

1、VisualVM

VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。

2、模拟一次OOM 并生成dump文件

JVM参数设置

-Xms64M -Xmx64M //将jvm内存设置小一点 触发oom

-XX:+HeapDumpOnOutOfMemoryError  //OOM时生成dump文件

-XX:HeapDumpPath=/Users/wecash/Downloads/oomDump.jprof  //生成dump文件的路径

代码:

public static void main(String[] args) {
    ArrayList list = new ArrayList<>();
    while (true) {
        UserDTO userDTO = new UserDTO();
        list.add(userDTO);
    }
}

3、执行

java.lang.OutOfMemoryError: Java heap space
Dumping heap to /Users/wecash/Downloads/oomDump.jprof ...
Heap dump file created [90742511 bytes in 0.604 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3210)
    at java.util.Arrays.copyOf(Arrays.java:3181)
    at java.util.ArrayList.grow(ArrayList.java:265)
    at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
    at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
    at java.util.ArrayList.add(ArrayList.java:462)
    at DumpTest.main(DumpTest.java:15)
 

4、找到dump文件 并在VisualVM中分析

VisualVM分析一次OOM_第1张图片

会发现UserDTO Size很大,占比很高

生产时可以通过某一对象异常大来定位到具体的地方 

你可能感兴趣的:(JVM)