使用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行

 

 


欢迎点赞关注和收藏

 

posted @ 2021-07-17 11:18  李白与酒  阅读(386)  评论(0编辑  收藏  举报