调用阿里云OSS未释放资源造成的内存溢出

 

前段时间线上服务频繁出现内存溢出的问题,有时候半夜就会挂掉,运维同事还得从睡梦中爬起来重启,给我们带来很大的困扰。一次运维同事在快到挂掉前把jvm 的heap dump拿了下来给了我们,通过内存分析工具 MemoryAnalyzer 打开看到结果如下

 

可以看到有大量的org.apache.http.impl.conn.PoolingHttpClientConnectionManager 对象未被释放 ,并且可以看到是 阿里云的 oss 在引用的,灵机一动,可能是访问oss服务的时候某些资源没被释放,

但是oss的类库是公司的另一部门封装的,我们产品是直接拿来用的,那就去看看他们的源码吧。

经过查看源码发现,在每一次的oss请求都会创建一个阿里云的 OSSClient实例 ,在调用ossClient接口请求完之后并没有调用OSSClient的shutdown()方法释放资源。怪不得运行几天后内存过高不行的fullGC 直至内存溢出。反馈给另一部门之后改完我们重新打包发版,

运行观察了一段时间,再没有出现内存溢出了。真好。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值