(十)手动模拟JVM内存溢出

我们主要自己模拟一个 JVM 内存溢出的场景。在模拟 JVM 内存溢出之前我们先来看下这样的几个问题。

  • 老年代溢出为什么那么可怕?
  • 元空间也有溢出?怎么优化?
  • 如何配置栈大小?避免栈溢出?
  • 进程突然死掉,没有留下任何信息时如何进行排查?

年轻代由于有老年代的担保,一般在内存占满的时候,并没什么问题。但老年代满了就比较严重了,它没有其他的空间用来做担保,只能 OOM 了,也就是发生 Out Of Memery Error。JVM 会在这种情况下直接停止工作,是非常严重的后果。

OOM 一般是内存泄漏引起的,表现在 GC 日志里,一般情况下就是 GC 的时间变长了,而且每次回收的效果都非常一般。GC 后,堆内存的实际占用呈上升趋势。接下来,我们将模拟三种溢出场景,同时使用我们了解的工具进行观测。

在开始之前,请你下载并安装一个叫作 VisualVM 的工具,我们使用这个图形化的工具看一下溢出过程。

虽然 VisualVM 工具非常好用,但一般生产环境都没有这样的条件,所以大概率使用不了。新版本 JDK 把这个工具单独抽离了出去,需要自行下载。

这里需要注意下载安装完成之后请在插件选项中勾选 Visual GC 下载,它将可视化内存布局。

堆溢出模拟

元空间溢出

堆外内存溢出

栈溢出

进程异常退出

猜你喜欢

转载自blog.csdn.net/lss446937072/article/details/110211005
今日推荐