实操 | 制造一个OOM,生成jvm的dump文件,并通过jvisualvm工具解析

为了熟悉dump文件和jdk自带的jvm分析工具,
本人决定制造一个OOM,得到jvm的dump文件,并使用jdk自带的jvisualvm工具解析

前置操作

如何制造OOM?
这里采用的方式是不断创建对象,因为创建对象会涉及内存分配,不断地分配内存而不释放就会导致OOM

package com.example.demo22;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.annotation.PostConstruct;
import java.util.ArrayList;

@SpringBootApplication
public class Demo22Application {

    class User{

    }

    public static void main(String[] args) {
        SpringApplication.run(Demo22Application.class, args);
    }

    //项目启动时的初始化方法
    // 死循环不断创建对象,制造OOM
    @PostConstruct
    public void init() {
        ArrayList list = new ArrayList<>();
        while (true) {
            list.add(new User());
        }
    }

}

操作步骤
  1. 设置jvm运行参数,目的是令jvm发生OOM时生成jump文件(文件后缀是.hprof ),该文件默认会在项目的根目录生成
  2. 项目发生OOM时,会在日志提示错误信息并打印dump文件名称
  3. 使用jdk自带的工具 jvisualvm 来解析dump文件从而还原“案发现场”(位于bin目录下)

控制台日志提示 be like:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid132332.hprof …

jvm参数设置参考

-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
细节截图
  • 如何在idea中设置JVM参数
    在这里插入图片描述

  • 如何在idea中打开项目的根目录
    在这里插入图片描述

  • 项目发生OOM之后,控制台的日志和出现在根目录下的dump文件
    在这里插入图片描述

  • 找到jdk的bin目录下的jvisualvm,载入dump文件
    在这里插入图片描述

  • 查看dump文件
    在这里插入图片描述

  • 其他:如何找到jdk安装路径?
    可以在idea的配置找,或者查看下电脑的环境变量当时是怎么配置的java环境变量的
    在这里插入图片描述

其他收获

jdk的bin目录放了很多有用的工具,可以慢慢研究:
包含一些用于开发Java程序的工具,例如:编译工具(javac.exe)、运行工具 (java.exe) 、打包工具 (jar.exe)等。

jvm 问题排查思路

在这里插入图片描述

参考文档

使用JVisualVM分析dump文件定位OOM

idea中设置JVM参数,简单理解JVM常见参数,JVM调优简单入门

真实案例 | 记录xx项目生产oom导致dump,通过jvisualvm排查.hprof文件找出问题根源

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值