记一次解决OutOfMemoryError: Java heap space详细过程与解决思路(jvisualvm解决问题案例详细分析)

记一次解决OutOfMemoryError: Java heap space详细过程与解决思路(jvisualvm解决问题案例详细分析)喧哗的夜满地银光 望向窗外 星的眨眼频率格外的高 低眼看泛着油光的键盘 心中的寂寞 滴滴 靠着每天 ctrl alt w 几千 的惯性 打开最 嘿嘿嘿 的聊天软件 心中不免惆怅 已过午时三刻 还 tm 不下班 惆惆啥 油光的脸瞬间露出一缕微笑 惺忪的眼也充满了血丝 那么 问题来了 一点自己写的代码的信息没有 怎么找错误信息是我朋友发给我的截图 我并没有他的代

那么:问题来了, 一点自己写的代码的信息没有,怎么找?相信这是大多数兄弟遇到内存问题的第一反应

错误信息是我朋友发给我的截图,我并没有他的代码,也不清楚项目的业务,更不知道为什么会OutOfMemory,懵逼中

记一次解决OutOfMemoryError: Java heap space详细过程与解决思路(jvisualvm解决问题案例详细分析)

开始搞事情

首先:理清思路

1. 发现问题

2. 分析问题

3. 解决问题


首先梳理一下思路:

  • OutOfMemory,内存溢出, 是的,溢出了,什么问题导致的呢,是不是程序的内存给的不够引起的呢。

    随即,我问了我的朋友程序启动指定内存没有?如果没有的话制定以下内存会不会解决问题呢

    -Xms512m -Xmx2048m
  • 你以为到这就结束了吗?那未免也太积薄水了吧
    记一次解决OutOfMemoryError: Java heap space详细过程与解决思路(jvisualvm解决问题案例详细分析)


    (●’◡’●): 不行呀,兄弟, 我访问没问题了,给我们老板访问就不行了,还是java.lang.OutOfMemoryError: Java heap space,是不是我们老板有毒呀,我是不是考虑要换一个公司呀。

1. 发现问题

兄弟一看,情况不对呀,尽管分配了内存,但是内存还是会溢出 经过一下系列分析(分析详细过程): 

记一次解决OutOfMemoryError: Java heap space详细过程与解决思路(jvisualvm解决问题案例详细分析)

这里写图片描述
其实很多信息都很明了了,启动程序的分配的堆内存大小、程序所占用的堆内存大小,暂时看起来是没什么毛病,内存的大小并没有什么异常的情况,而且此时并没有发声内存溢出的异常。
记一次解决OutOfMemoryError: Java heap space详细过程与解决思路(jvisualvm解决问题案例详细分析)
但是,没有问题怎么会出异常呢,表开心的太找,下面这张图片是没有为程序启动的时候分配内存,并且发起了一次请求后的内存情况。
这里写图片描述








要解决的就是你,此时,问题bug已经重现,问题发现,第一关完美通关!!!

2. 分析问题

记一次解决OutOfMemoryError: Java heap space详细过程与解决思路(jvisualvm解决问题案例详细分析)

好的女王大人

这里写图片描述

点击类后查看对象的内存占比情况如下,点击大小按钮进行内存占比大小排序

这里写图片描述

3. 解决问题

继续跟踪这个对象,看丫的到底是个什么东西,有必要搞他一搞。

右击该对象,点击在实例视图中显示按钮,跳转如下页面

这里写图片描述

这里写图片描述

问题找到了,一个request的请求头占了四百兆,后续根据这个结果发现,为这个程序分配了两个g的最大内存之后,每次请求都会生成400m的该byte数组,接下来就定位到了请求的身上。

问题找到了,接下来就该看代码了,代码是这位兄弟写的,我就不方便随便贴人家的代码了,我先让这位兄弟检查一下代码,这个接口上做没做什么特殊处理,拦截器、过滤器、所有跟request请求相关的配置,都检查一遍,最后在springboot的配置文件中发现了如下配置:

这里写图片描述

这简直就是自己挖坑给自己跳呀,具体配置说明兄弟就不再解释了

记一次解决OutOfMemoryError: Java heap space详细过程与解决思路(jvisualvm解决问题案例详细分析)

满脑子黑人问号不再多bb了,咱们在这不多讨论该兄弟为什么这么写

jvisualvm、 jprofile真的是一个内存优化、排查问题的一个好工具,java们早晚会用到它,jprofile教程网上并不少,但是讲的好的并没有几个。重要的还是要自己去熟悉,去理解。

该篇文章仅作为内存溢出的一个解决思路

另提醒各位程序朋友们,可能做不到每一行代码都能刨根问底知道底层是怎么实现、什么原理,但是尽量知道你写或copy的每一行代码什么意思,影响有多大。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228420.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午7:03
下一篇 2026年3月16日 下午7:04


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号