Idea中修改Jvm的堆内存,模拟内存溢出异常终止情况

由于项目部署在服务器上,异常终止,打印log日志才发现,堆内存溢出,所以为了具体了解并解决这个问题,借此本地模拟堆内存溢出,得到堆内存hprof文件,可用工具具体分析。

1、本项目为一个springboot项目,修改项目启动模块,如下图,VM options 中添加

-Xms60m
-Xmx60m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=C:\Users\luoyong\Desktop\error  //hprof文件 存放位置

不到一会儿,由于堆内存太小,导致没有足够的内存,项目异常终止;

java.lang.OutOfMemoryError: GC overhead limit exceeded,即内存溢出,主要是因为需求资源超出JVM的可用资源,导致报错。

报错原因

在很多情况下都会出现java.lang.OutOfMemoryError报错,具体原因通过资料得知,主要有以下两种:

  • 外因:

程序的内存太大(比如class文件太多、lib下的jar文件太多等等)或者逻辑有误,导致程序的运行内存过大,超出限制。

  • 内因:

内因多是由于wildfly的启动参数造成的,比如JVM的初始内存、JVM的最大内存等问题。

ps:此处出自:https://blog.csdn.net/xiazaixm/article/details/85676475

当有OutOfMemory异常出现的时候,JVM就会将当前的虚拟机的堆等信息放入hprof文件中,名字是大概java_pid加上进程号,比如:java_pid17712.hprof (可分析文件)

我们可以进行以下两种方式分析:

#1 通过jdk自带的内存分析工具JVisualVM   java_pid17712.hprof

#2 通过一个基于Eclipse的内存分析工具 Eclipse Memory Analyzer —— MAT

如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄ 3 ̄)づ

如果喜欢怂怂写的文章,就给阿怂点个关注吧!(๑′ᴗ‵๑)づ╭❤~

对文章有任何问题欢迎小伙伴们下方留言,阿怂看到一定会极力给予答复。

发布了85 篇原创文章 · 获赞 197 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/weixin_43970743/article/details/103761963