一次死循环引起的内存溢出

在一次项目中遇到个由死循环引起的内存溢出问题。因为我们项目中由引入了其他项目组的一个JAR包,在测试的过程中,发现了JAR中的代码有点问题,就有他们改了重新发布。重新发布后,应用跑了一会儿发现没有日志输出了,程序没有反应了,去监控地址看了下,发现了如下图的情况:

Image.png

老年代频繁发生GC,并且老年代的内存也不见减少。通过使用jmap -histo pid命令,发现了有个CabinDTO的对象占了两个G左右,通过将本次修改的代码和上次进行对比,逐一注释掉一些代码,最终定位到了是JAR包中的代码在某些特定的情况下会产生死循环。让他们修改后问题解决。

通过这次问题,我们在排查老年代频繁内存溢出的时候,首先需要打出dump文件,或者使用jmap -histo pid命令打印出堆中存活对象的统计,看是哪个对象占用了大量的空间。然后再去找对应的代码哪里出问题了。

原创文章,作者:纸飞机-JAVA追梦,如若转载,请注明出处:https://www.zfjsec.com/336.html
-- 展开阅读全文 --
开发自己的编程语言 —— 完善数字计算
« 上一篇 06-08
Spring多数据源使用事务不生效的问题
下一篇 » 06-10

发表评论