使用JProfiler 分析 OOM

原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/15022708.html

 

模拟

先模拟一个OOM的类

 1 package org.fool.test;
 2 
 3 import java.util.LinkedList;
 4 import java.util.List;
 5 
 6 public class TestOOM {
 7     public static class OOMObject {
 8         byte[] b = new byte[1024];
 9     }
10 
11     /**
12      * -Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp
13      */
14     public static void main(String[] args) {
15         List<OOMObject> list = new LinkedList<>();
16         while (true) {
17             list.add(new OOMObject());
18         }
19     }
20 }

 

测试

启动测试前需要配置VM Options

-Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp

使用JProfiler 分析 OOM

 

运行测试

使用JProfiler 分析 OOM

 

分析 

使用JProfiler 打开tmp 目录下的 java_pid52952.hprof 文件

使用JProfiler 分析 OOM

Note:JProfiler 是商业软件,使用需要购买 license

 

双击TestOOM$OOMObject

使用JProfiler 分析 OOM

 

在References 选择Incoming references

使用JProfiler 分析 OOM

 

随机选择一个,点击右上方的 Show Paths To GC Root,定位到问题出现在代码的17行

使用JProfiler 分析 OOM

 

 


欢迎点赞关注和转发

使用JProfiler 分析 OOM

 

上一篇:一次生产OOM问题排查


下一篇:java 内存泄漏 与 内存溢出