OOM排查小案例

简介: 写作目的排查过某OOM问题吗?额。。。没有

小案例


程序


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文件


-Xmx1m -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=C:\Users\25682\Desktop\aaa


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


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


20.png


分析dump文件


MAT分析工具的获取


https://blog.csdn.net/weixin_39621669/article/details/110668789


注意:我下载的是1.10.0版本,下载高版本的话可能需要你装更高版本的JDK


分析dump文件


内存占用过大的对象是什么


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


21.png


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


22.png


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


23.png


这个对象被谁引用

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


24.png


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


25.png


定位到具体的代码


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


26.png

目录
相关文章
|
7月前
|
缓存 Java Android开发
【OOM异常排查经验】
【OOM异常排查经验】
127 0
|
9月前
|
运维 监控 Java
内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程)
全网最全的内存溢出CPU占用过高排查文章,包含:问题出现现象+临时解决方案+复现问题+定位问题发生原因+优化代码+优化后进行压测,上线+复盘
1446 5
|
6天前
|
监控 网络协议 NoSQL
java线上排查OOM内存溢出
java线上排查OOM内存溢出
61 1
|
7月前
|
监控 Java
jvm异常排查
jvm异常排查
29 0
|
7月前
|
消息中间件 存储 缓存
【10个OOM异常的场景以及对应的排查经验】
【10个OOM异常的场景以及对应的排查经验】
|
9月前
|
Java Linux
|
9月前
|
监控 Java
【线上问题排查】CPU100%和内存100%排查
【线上问题排查】CPU100%和内存100%排查
126 1
|
11月前
|
Arthas Java 测试技术
发生OOM了,你知道是什么原因吗,又该怎么解决呢?
总结常见的OOM的原因以及解决方案。
328 0
|
消息中间件 运维 监控
线上踩坑记:项目中一次OOM的分析定位排查过程!
线上踩坑记:项目中一次OOM的分析定位排查过程!
|
存储 SQL Java
线上又 OOM 了 ,教你快速定位问题~
线上又 OOM 了 ,教你快速定位问题~
线上又 OOM 了 ,教你快速定位问题~