使用JPofiler工具分析OOM原因

在一个项目中,突然出现了OOM故障,那么该如何排除~

  • 能够看到代码第几行出错:内存快照分析工具,MAT,Jprofiler

  • Dubug,一行行代码分析!

MAT,Jprofiler作用:

  • 分析Dump内存文件,快速定位内存泄露

  • 获得堆中的数据

  • 获得大的对象

  • ...

查看虚拟机内存

        虚拟机试图使用的最大内存和虚拟机的初始化总内存

public class Test {
    public static void main(String[] args) {
        // 获取虚拟机试图使用的最大内存
        long max = Runtime.getRuntime().maxMemory();
        // 获取jvm初始化总内存
        long total = Runtime.getRuntime().totalMemory();
        System.out.println("max="+max+"字节\t"+(max/(double)1021/1024)+"MB\t"+(max/(double)1021/1024/1024)+"GB");
        System.out.println("total="+total+"字节\t"+(total/(double)1024/1024)+"MB\t"+(total/(double)1021/1024/1024)+"GB");
        // 默认情况下:分配的最大内存是电脑内存的1/4;初始化的内存是电脑内存的1/64
        // 分析OOM:
        //          1.尝试扩大堆内存,看结果
        //          2.分析内存,看一下哪个地方出现了问题(专业工具)JProfiler
        // -Xms1024m -Xmx1024m -XX:+PrintGCDetails
        // 305664K+699392K = 1005056K   981.5M
    }
}

        设置VM options之前

 

        设置VM options之前(-Xms1024m -Xmx1024m -XX:+PrintGCDetails)

 

        idea设置JVM堆内存大小

 

idea的VM options设置

   -Xms1m -Xmx1m -XX:+PrintGCDetails

        -Xms 设置初始化内存分配大小,默认1/64

        -Xmx 设置最大分配内存大小,默认1/4

        -XX:+PrintGCDetails --- 打印GC垃圾回收信息

        -XX:+HeapDumpOnOutOfMemoryError --- OOM DUMP

制造OOM错误

package com.yuan;

import java.util.ArrayList;

//dump  -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError  OOM dump

//默认情况下,分配的最大内存是电脑内存的1/4 而初始化的内存是 1/64
//-Xms 设置初始化内存分配大小   默认初始化的内存电脑内存的1/164
//-Xmx 设置最大分配内存,最大内存是电脑内存的1/4
//-XX:+PrintGCDetails   打印GC垃圾回收信息


public class demo01 {
    byte[] array = new byte[1 * 1024 * 1024];

    public static void main(String[] args) {
        ArrayList<demo01> list = new ArrayList<>();
        int count = 0;

        try {
            while (true) {
                list.add(new demo01());
                count++;
            }
        } catch (Error e) {
            System.out.println("count:" + count);
            e.printStackTrace();
        }

    }
}

 

        idea的VM options设置        -XX:+PrintGCDetails --- 打印GC垃圾回收信息

 

        然后再次运行,idea的VM options设置 -Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError

 

        在当前项目路径下有一个hprof文件

  

        双击打开

 

        下面可以看出ArrayList存放对象太大了

 

        下面可以看出具体哪一行报的错误

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值