0
点赞
收藏
分享

微信扫一扫

线上OOM问题如何定位

吴陆奇 2022-02-26 阅读 79

这里我们先建一个springboot项目模拟出OOM问题,具体代码如下。
在这里插入图片描述
在这里插入图片描述
打包部署到服务器上后开始运行。
在这里插入图片描述
查看日志发现java.lang.OutOfMemoryError: Java heap space
这里我们是创建大量对象,对象又是存储在堆中,所以这边OOM的原因后面已经标注了是heap没有空间了。
大家对于此类问题的分析,平时可以多看看JVM的数据,了解JVM中运行时数据区域中每一个区域存放哪些内容,这样在定位OOM问题时也可以根据信息更好的确认。

这是我们导出内存快照查看。

由于jhat 命令查看一般不够方便,所以都会使用visualVM来查看。visualVM在jdk的bin目录下就有,但是本人用jdk1.8自带的一直无法加载。
所以又自己下载了一个,下载链接https://visualvm.github.io/download.html
在这里插入图片描述
这里重新打印出mem-test.hpref文件,然后放到本地下载好的visualvm中加载
点击load
在这里插入图片描述

选择hpref文件
在这里插入图片描述
之后按图中步骤依次点击后查看

在这里插入图片描述
本图中第一步是选择查看对象,第二步是选择实例,第三步是打开GC引用信息,第四步是根据size排序后选择size最大的一个,第五步是查看此实例的GC引用信息。
我们从第五步中可以看到我们自己项目中的类,static map in class com.ai.toptea.sysm.entity.MyThread : MyThread
这样就可以定位到我们代码中具体哪个类产生了大量对象一直没有回收了。

举报

相关推荐

0 条评论