一次java OOM的排查-AbstractAutoProxyCreator的advisedBeans

服务最近隔一段时间会出现java.lang.OutOfMemoryError: Java heap space异常。

初步猜测发布新版本功能后存在内存泄露代码。

排查方法如下:

1.通过jmap导出dump文件

2.通过mat分析,发现部分堆内存占比过大

问题出现在AbstractAutoProxyCreator的advisedBeans这个方法

3.分析业务代码定位到 一个返给前端动态html的接口

这个接口用的是@Controller

如果接口返回的是模板路径或者是相对固定的字符串不会出现问题。

但是一旦返回的是动态html代码或者是动态的路径。会通过springmvc的AbstractAutoProxyCreator的advisedBeans方法把动态生成的内容添加到其内部的集合里面,久而久之,导致oom问题。

4.解决方案

业务接口需要返回html代码,所以如下改进。

接口添加:@ResponseBody以及produces = "text/html;charset=UTF-8"

通过明确返回数据的配置,不去调用此默认方法。猜测此方法的设计初衷应该是为了配和模板引擎使用。路径相对固定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值