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

目录
相关文章
|
缓存 Java Android开发
【OOM异常排查经验】
【OOM异常排查经验】
221 0
|
3月前
|
缓存 JavaScript Java
常见java OOM异常分析排查思路分析
Java虚拟机(JVM)遇到内存不足时会抛出OutOfMemoryError(OOM)异常。常见OOM情况包括:1) **Java堆空间不足**:大量对象未被及时回收或内存泄漏;2) **线程栈空间不足**:递归过深或大量线程创建;3) **方法区溢出**:类信息过多,如CGLib代理类生成过多;4) **本机内存不足**:JNI调用消耗大量内存;5) **GC造成的内存不足**:频繁GC但效果不佳。解决方法包括调整JVM参数(如-Xmx、-Xss)、优化代码及使用高效垃圾回收器。
173 15
常见java OOM异常分析排查思路分析
|
3月前
|
存储 监控 Java
线上OOM排查
本文介绍了JDK工具的使用方法及其应用场景。首先详细说明了`jps`、`jstack`、`jstat`和`jmap`等工具的基本用法及参数含义,帮助开发者实时监控Java进程的状态,诊断线程问题及内存使用情况。接着介绍了`jvisualvm.exe`和`MemoryAnalyzer.exe`两款内存诊断工具,展示了如何通过这些工具进行内存分析。最后,文章提供了在线上OOM故障排查的具体步骤,并给出了解决方案示例,以便开发者更好地理解和解决实际问题。
线上OOM排查
|
6月前
|
存储 缓存 监控
深入JVM:解析OOM的三大场景,原因及实战解决方案
深入JVM:解析OOM的三大场景,原因及实战解决方案
|
监控 Java
jvm异常排查
jvm异常排查
56 0
|
Java Linux
生产环境OOM问题的排查记录
生产环境OOM问题的排查记录
197 1
|
消息中间件 存储 缓存
【10个OOM异常的场景以及对应的排查经验】
【10个OOM异常的场景以及对应的排查经验】
225 0
|
缓存 算法 Java
JVM问题排查
JVM问题排查
192 0
|
SQL 存储 Java
【问题处理】—— 一次内存溢出(OutOfMemoryError)实战排查
【问题处理】—— 一次内存溢出(OutOfMemoryError)实战排查
300 0
|
存储 Java Linux
浅析JVM几种常见OOM异常原因及解决方案(上)
在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM) 异常的可能。