前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OOM排查小案例

OOM排查小案例

作者头像
CBeann
发布2023-12-25 19:11:22
1610
发布2023-12-25 19:11:22
举报
文章被收录于专栏:CBeann的博客CBeann的博客

写作目的

排查过某OOM问题吗?额。。。没有

小案例

程序

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

public class Main {

  public static void main(String[] args) throws Exception {
    List<Dandan> list = new ArrayList<>();
    while (true) {
      list.add(new Dandan());
    }
  }
}

class Dandan {}

获取dump文件

代码语言:javascript
复制
-Xmx1m -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=C:\Users\25682\Desktop\aaa

其中Xmx是设置堆的最大值,HeapDumpOnOutOfMemoryError 设置当出现OOM的时候生成dump文件,HeapDumpPath表示生成的dump文件的位置

在上面的程序中添加这几个参数就会在指定的路径下获取到一个dump文件

在这里插入图片描述
在这里插入图片描述

分析dump文件

MAT分析工具的获取

https://blog.csdn.net/weixin_39621669/article/details/110668789 注意:我下载的是1.10.0版本,下载高版本的话可能需要你装更高版本的JDK

分析dump文件
内存占用过大的对象是什么

把dump文件导入到MAT中,如下图所示

在这里插入图片描述
在这里插入图片描述

点击finish后进入主页面,如下图所示,可以发现main线程是有问题的

在这里插入图片描述
在这里插入图片描述

点击图中菜单的按钮,根据数量排序,找到数量最大的对象,我们发现Dandan对象是可疑的

在这里插入图片描述
在这里插入图片描述
这个对象被谁引用

点击下图中菜单栏中的按钮,我们会选择之前怀疑的main线程,选中并且点击

在这里插入图片描述
在这里插入图片描述

发现main线程和Dandan对象确实是有联系的,因此可以推断出 发生OOM的对象是被main线程关联的

在这里插入图片描述
在这里插入图片描述
定位到具体的代码

点击下图中的按钮,然后就出现了下图中类似线程调用栈的过程,从下往上看,并且后面有执行的代码行数,就可以定位到具体的代码

在这里插入图片描述
在这里插入图片描述

参考

https://www.bilibili.com/video/BV1q84y1F7kJ?from=search&seid=1887129671651989294 https://www.cnblogs.com/jiyukai/p/9292348.html https://blog.csdn.net/yinni11/article/details/82463844

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写作目的
  • 小案例
    • 程序
      • 获取dump文件
        • 分析dump文件
          • MAT分析工具的获取
          • 分析dump文件
      • 参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档