美文网首页
JVM OOM分析思路

JVM OOM分析思路

作者: 风凡的雪 | 来源:发表于2018-07-03 10:27 被阅读0次

Java堆发生OutOfMemoryError分析思路:查看堆存储快照,首先确认内存中的对象是否都是必要的(即可定位是发生了内存泄漏,还是的确是内存溢出)。
分析是否是内存泄漏:查看GC Roots的引用链,从而定位泄漏内存的代码位置。
如果是内存溢出:看是否可以调整-Xmx,-Xms。然后检查某些生命周期过长的对象是否是必要存在的。

注:在JDK1.7以后,字符串常量池被移到了堆中。

产生OutOfMemoryError实验:只要不断申请新对象,并使GC Roots到这个对象可达即可(不被回收)。

虚拟机栈和本地方法栈溢出:虚拟机栈和本地方法栈的大小都是使用-Xss参数配置(这是为单个线程分配的大小)。
单线程情况下:所有栈内存都给当前线程使用,所以说,栈的深度不断增加,将会发生StackOverflowError。

多线程情况下:堆,方法区的内存大小是确定的,程序计数器的忽略不计。那么剩下的内存则由虚拟机栈和本地方法栈瓜分。如果-Xss设置的越大,那么可建立的线程数就越小。所以说,如果要多建立几个线程,则要控制-Xss或者减小堆大小。

方法区溢出:
运行时常量池:
方法区其它区域存储的是:常量,静态变量,即时编译器编译产生的代码,虚拟机加载的类信息。所以说我们可以用动态生成类来产生异常。在spring等框架中,使用字节码增强技术动态产生了类,可能就会方法区溢出。

直接内存溢出:可通过:-XX:MaxDirectMemorySize指定,如果不指定,则默认与-Xmx一样大
溢出解决思路:如果发生了OOM,但Dump很小 && 程序直接或间接使用了NIO,则查看一下是否是直接内存溢出的缘故。

相关文章

  • JVM OOM分析思路

    Java堆发生OutOfMemoryError分析思路:查看堆存储快照,首先确认内存中的对象是否都是必要的(即可定...

  • JVM OOM异常会导致JVM退出吗?

    参考文章:JVM OOM异常会导致JVM退出吗? 结论是:OOM是针对线程的,哪个线程OOM了,JVM是释放掉该线...

  • JVM-OOM排查思路

    JVM 内存溢出排查思路: 一般来讲,我们会先用 free 命令先来检查一发内存的各种情况, 堆内内存 JVM 中...

  • [JVM]OOM实例分析

    深入理解Java虚拟机[JVM]Java内存区域与垃圾收集 - 思维导图[JVM]类加载机制 - 思维导图[JVM...

  • 2. Interview-JVM&GC

    JVM知识图谱 1 怎么解决OOM?/ 怎么排查OOM?/ JVM调优 参考:https://blog.csdn....

  • JVM学习笔记与调优实战(五):OOM测试实例与内存查看工具的使

    标签: JVM 1、OOM测试实例: JVM配置说明: 分析:一般情况下,虚拟机的初始堆内存会比最大堆内存要小,而...

  • JVM-结合MAT工具来分析OOM问题

    简单来演示一下OOM的分析和实战。 直接上代码: JVM参数: -XX:+UseParNewGC -XX:+Use...

  • 学习方向

    多线程,并发,锁机制,集合内部实现及原理,OOM,CPU性能分析,JVM调优,内存模型,类加载,spring,事务...

  • JVM

    JVM 类加载过程 动态链接、静态链接与分派 对象占用内存大小 内存 垃圾回收 CPU爆满原因分析 OOM Syn...

  • 如何快速感知到jvm oom了?

    线上有些应用会不定期的oom,当出现jvm oom, 应用有可能挂掉,也可能不会挂掉,主要看 jvm中是否还有非守...

网友评论

      本文标题:JVM OOM分析思路

      本文链接:https://www.haomeiwen.com/subject/crcduftx.html