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

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

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

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

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

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

原文地址:https://www.cnblogs.com/jasonChai/p/11961839.html

时间: 2024-10-23 10:08:49

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

iOS使用阿里云OSS对象存储 (SDK 2.1.1)

最近项目中用到了阿里云OSS对象存储,用来存储APP中图片.音频等一些数据.但坑爹的阿里云居然在11月20日将SDK版本更新到了2.1.1,然而网上给出的教程都是1.*版本的(针对iOS),两个版本所调用的方法差别较大(自我感觉),当然原理都一样.所以看了两天SDK,自己封装了几个常用的方法. 一.OSS简单介绍 OSS是提供非结构化数据存取的服务,非结构化数据一般包括图片.文档.音频.视频等一些文件.OSS提供了接口,开发者可以通过这些接口对数据进行上传或下载等操作. 开通OSS服务后,创建一

thinkphp集成系列之阿里云oss

web2.0时代:除了纯信息展示类的网站:基本都是有文件上传功能的: 最不济你得让用户换个头像吧:但是随着业务的发展: 如果上传的文件都和网站程序源代码放在一起:那是有相当多的弊端的: 1:静态文件会占用大量带宽: 2:服务器的成本略高: 常规的做法是把php源代码放到一台服务器上:图片等静态文件放在另一台服务器上: 当一个神奇的“云”时代的到来后:一切就变的更加简单了: 在业务还比较小的时候:我们无需大费周折的去搞一台静态文件服务器:直接使用第三方的即可: 好了:洛里啰嗦了半天:下面请出本篇博

Aliyun OSS Nginx proxy module(阿里云OSS Nginx 签名代理模块)

1.此文章主要介绍内容 本文主要介绍怎样利用Nginx lua 实现将阿里云OSS存储空间做到同本地磁盘一样使用.核心是利用Nginx lua 对OSS请求进行签名并利用内部跳转将全部訪问本地Nginx的请求加上OSS 签名转发给OSS,实现本地Nginx无缝衔接阿里云OSS,存储空间无限扩展,存储成本无限下降,数据安全%99.99-- . 2.本篇文章使用到的一些工具技术及怎样学习和获取 1.lua 本文用到的都是一些主要的lua,基本上花半小时阅读下lua的语法就能够轻松理解本文内容 2.N

阿里云 OSS

原文:https://help.aliyun.com/ 阿里云 OSS 阿里云 OSS(Object Storage Service)为您提供基于网络的数据存取服务.使用 OSS,您可以通过网络随时存储和调用包括文本.图片.音频和视频等在内的各种结构化或非结构化数据文件. 在使用阿里云 OSS 之前,您需要了解 OSS 的几个基本概念.阿里云 OSS 将数据文件以对象(object)的形式上传到存储空间(bucket)中. 您可以创建一个或者多个存储空间,然后向每个存储空间中添加一个或多个文件.

angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前只有"cn-hangzhou"这个region可用, 不要使用填写其他region的值 //<setting name="accessKeyId" value="H6JSh0Y****z2cGa" /> //<setting name="ecr

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github地址:https://github.com/aliyun/aliyun-oss-php-sdk 2.复制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS,如图1.2 复制aliyun-os

laravel下使用阿里云oss上传图片

对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上.最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss. 在研究了一下以后,摆着不自己造轮子的原则,决定使用AliyunOss,国人laravel高手JohnLui封装的一个阿里云oss的操作库. AliyunOSS 是阿里云 OSS 官方 SDK 的 Composer 封装,支持任何 PHP 项目,包括 Laravel.Symfony.TinyLara 等等.Github 地址:http

阿里云 oss 小文件上传进度显示

对阿里云OSS上传小文件时的进度,想过两个方法:一是.通过多线程监測Inputstream剩余的字节数来计算,可是由于Inputstream在两个线程中共用,假设上传线程将Inputstream关闭,在监測线程就会报"句柄无效"的错误,甚至会导致上传失败:第二个方法是通过线程不断监測OSS上已经上传文件的大小,可是在文件全然上传前是不能获得文件大小的. 最后突然灵感来了,把两个方法同一时候使用就行监測文件上传的进度. 看代码: // 上传小文件 private static void

阿里云oss上传图片

1.首先我们要下载阿里云oss的sdk包:(可以下载原版的,改过的通用版在本人的百度云,嘎嘎嘎~) 2.下载好之后放到项目文件目录里面 3.要在需要的控制器引用这个sdk文件例如: include("./ThinkPHP/Library/Vendor/oss/index.php"); 然后实例化这个类,调用上传的方法 =================================================== 再看类文件:下载好了以后修改类文件的index.php <?