使用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 打开tmp 目录下的 java_pid52952.hprof 文件

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

双击TestOOM$OOMObject

在References 选择Incoming references

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


欢迎点赞关注和收藏

强者自救 圣者渡人
原文地址:https://www.cnblogs.com/agilestyle/p/15022708.html