通过 JProfiler排查OOM异常

在学习 JVM过程中使用到两个软件:
Java Visualvm用于演示对象分配过程;
JProfiler 用于排查出现异常的问题所在,有利于 JVM调优。

JProfiler 测试版本:11.0

Java Visualvm:1.8

JDK:1.8

IDEA:2019.1

1.写一个会OOM的程序


public class Main {

    public static void main(String[] args) {
        //StackOverflowError
        //main(args);

        //OutOfMemoryError
        List<JPerson> list = new ArrayList<>();
        while (true) {
            list.add(new JPerson(new Random().nextInt(1024 * 1024)));
        }
    }

}

class JPerson {
    public JPerson(Integer byt) {
    }
}

2.在Idea中通过 Run->Edit Configuration 进入参数设置

在这里插入图片描述

  • List item
  • -Xms100m:设置初始堆为100M
  • -Xss100m:设置初始栈为100M
  • -Xmx1024M:设置最大堆为1024M(如果值设的太大或者没设置最大堆,则在测试的时候出现OOM会比较久)
  • -XX:+HeapDumpOnOutOfMemoryError:当出现OOM时,生成Dump文件

3.在IDEA通过show in Explorer,即类所在本地目录的上一级目录会生成对应的Dump文件,双击打开文件。在这里插入图片描述

4.可以看到 JPerson占的百分比非常大,初步判断是程序中 JPerson出问题
在这里插入图片描述

5.因为本次代码在 Main线程运行,所以通过main线程可以进一步追踪问题,由main所显示的具体信息(从下往上看)可知,是 main线程中 ArrayList中的 add()方法导致OOM。
在这里插入图片描述

另外再介绍一个动态查看堆中各个分区变化的工具:Java Visualvm

在这里插入图片描述

找到对应的线程,查看Visualvm GC即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值