码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 实操 | 制造一个OOM,生成jvm的dump文件,并通过jvisualvm工具解析


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

    文章目录

          • 前置操作
          • 操作步骤
          • 细节截图
          • 其他收获
          • jvm 问题排查思路
          • 参考文档

    前置操作

    如何制造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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    操作步骤
    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
    
    • 1
    细节截图
    • 如何在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文件找出问题根源

  • 相关阅读:
    prompt 综述
    wordpress的手工迁移
    微信小程序 实现天气预报接入
    Ubuntu 录屏软件 peek 安装
    leetcode 817. 链表组件(java)
    单元测试 —— JUnit 5 参数化测试
    Self-attention自注意力机制——李宏毅机器学习笔记
    jenkins配置maven+git自动构建jar包
    CSS笔记(黑马程序员pink老师前端)盒子阴影,文字阴影
    015 Linux 标准输入输出、重定向、管道和后台启动进程命令
  • 原文地址:https://blog.csdn.net/xianyu_x/article/details/126756432
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号