欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-23 17:04:52
...

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

(这年头,出点原创不易,精品更不易)