记一次JAVA内存溢出排查方式
写代码时,偶尔会碰到java.lang.OutOfMemoryError:Java head space,或metaspace。一般这个会进行百度,然后根据别人的经验修改Xmx参数,扩大堆最大内存。但是有时候内存溢出是我们代码问题。由于服务器可能在报错的时候就已经关闭了,所以我们没办法根据服务器查找到代码原因,所里这里采用查看内存快照的方式进行查看。
一、模拟内存溢出bug
在idea代码中加入死循环

二、项目打包,并设置发布参数
为模拟实际情况,这里采用java -jar发布并设置发布参数
maven install打包

编写bat启动项

#开启内存快照,指定快照存放目录
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/app/dumps/
三、启动项目,实现内存溢出
启动项目

浏览器访问死循环,并返回报错

四、查看内存快照并分析
- 从jdk中打开jvisualvm.exe

- 打开后在点击左上角【文件】-【装入】打开刚刚指定目录下的内存快照文件

打开后如图所示

打开后红框处已经显示出内存异常的原因和线程,点击线程名

红框处可查看到本次内存溢出的导火索是具体哪一行代码导致
本文讲述了在开发中遇到JAVA内存溢出错误时,如何通过模拟内存溢出、打包项目并设置内存快照、使用JVisualVM分析内存快照来定位代码问题的详细步骤。
排查思路,非修改jvm参数&spm=1001.2101.3001.5002&articleId=132714992&d=1&t=3&u=c4c62e3ebdd340d7ab1ad2f2a21a244d)
546

被折叠的 条评论
为什么被折叠?



