使用OSS中的数据作为机器学习的训练样本
DataLakeAnalytics+OSS:基于OSS的Severless的交互式查询分析
通过HDP2.6 Hadoop读取和写入OSS数据
通过CDH5 Hadoop读取和写入OSS数据
Apache Impala(CDH6)查询OSS数据
Spark使用OSS Select加速数据查询
基于OSS+MaxCompute构建数据仓库
数据备份和容灾
备份存储空间
数据库备份到OSS
通过云存储网关使用OSS服务
本地共享文件夹访问
本地磁盘访问
OSS上传提示Name or service not known报错
osscmd工具上传提示InvalidBucketName报错
调用Callback时页面显示400 call back error
OSS服务.netSDK中使用MemoryStream上传文件为空的解决方法
OSS下载rar格式文件,打开后乱码
IE浏览器下载OSS文件后扩展名被省略
OSS支持FTP吗?
OSS文件实现强制下载的方法
OSS Post请求的Policy设置方法
OSS通过range参数获取部分文件
OSS的文件更新后,部分地区下载的文件仍是旧的版本
在OSS控制台中读请求与写请求次数统计的来源
使用OSS的JS SDK上传大于100K的文件时报错
OSS验证Refer防盗链是否生效
OSS变通实现IP黑白名单
STS生成的临时账户授权检查逻辑
OSS的Bucket权限管理
如何获取AccessKeyId和AccessKeySecret
Access key对OSS的bucket控制权限太高,需要对bucket更细粒度的权限控制
RAM子账户授权OSS单个bucket中部分文件的访问权限
oss域名访问提示Anonymous access is forbidden for this operation.
OSS细粒度的权限控制
OSS异常流量排查及防护
如何给子账号赋权OSS的操作?
如何授权RAM子账号列举指定文件目录
Python sdk中multiupload上传如何验证文件完整性
OSS MD5一致性校验说明
OSS下载内容与实际内容不一致
域名/网络
OSS如何查看Bucket内网、外网域名地址
ECS用户如何正确使用OSS内网地址?
OSS是否支持Bucket作为三级域名的访问方式?
OSS是否支持HTTPS访问
通过反向代理访问OSS的HTTPS域名
OSS+CDN访问文件直接下载
OSS设置Object更新时自动刷新CDN缓存
OSS使用SDK访问Bucket提示Endpoint错误
OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'的解决方法
访问OSS资源或者使用SDK时提示“ using the specified endpoint”
OSS绑定域名时验证域名所有权
为什么OSS内网域名无法ping通
DNS解析
站点中如何应用OSS资源
OSS如何开启CDN加速服务
OSS触发FIN的条件
OSS上传或下载的带宽限制
OSS上传慢
如何停止绑定域名时默认开启的CDN服务?
如何设置HTTPS证书托管
对象存储OSS中Bucket的访问域名使用介绍
对象存储OSS查看Bucket统计和Object统计方法
通过OSS控制台资源监控报表功能了解Bucket使用情况
通过OSS控制台概览了解Bucket相关属性
OSS通过管理控制台查看资源监控报表的请求次数统计信息
如何授权子账号云查看OSS控制台总概览的基础数据
存储空间(bucket)管理
如何获取OSS上每个文件夹的大小
OSS中可以重命名Bucket吗?是否支持Object迁移?
OSS如何一键删除Bucket
OSS对object和目录的移动与修改操作
OSS的Bucket、Object、文件目录命名规范汇总
OSSFS通过www账户挂载Bucket
OSS API设置LifeCycle提示时间格式错误
OSS开启访问日志
查找OSS Object的访问操作记录
OSS日志里面206代表什么
OSS的Bucket每天会自动生成名称中包含日期的Object
OSS数据操作常见问题FAQ
Bucket下出现异常文件如何排查
如何查看存储空间大小
OSS可创建Bucket个数限制,容量是否需要扩容?
如何删除Bucket
文件(object)管理
OSS怎么更改Object元数据信息
OSS中LifeCycle删除文件的策略
判断OSS文件被删除
OSS删除碎片文件
当Object名称中存在不可见字符如何处理?
OSS有哪些批量操作?
OSS静态文件的打开方式
OSS的gzip压缩如何使用?
IE浏览器中浏览OSS的object URL中文文件名乱码
OSS 如何设置 Content-Type(MIME)?
上传Object后如何获取访问URL
如何给文件重命名
如何修改、更新、编辑文件?
OSS上传文件大小限制
OSS SDK如何进行批量操作?
Java实现生成URL签名的代码示例
PHP实现OSS的签名URL
OSS如何通过sdk获取object的签名URL
OSS中的时间标准
控制台获取签名链接后过一段时间超时
调用oss sdk操作报错:SignatureDoesNotMatch
Object签名URL相关问题
签名错误 (signature not match)
API/SDK
OSS支持时间同步的sdk
nternal.aliyuncs.com...
Oss Java sdk实现listobject(列出所有的object)
使用OSS的javasdk的contentMD5出现log4j警告
OSS Java SDK超时&重传代码样例
测试版PHP SDK中不能自动检测所需PHP模块的原因
OSS API文档 “Date”字段的GMT格式说明
- assumed...
OSS API返回结果有JSON格式的吗?
Python sdk查询所有object列表
iOS SDK和Android SDK如何开启log?
OSS图片处理服务不支持ICO格式图片
OSS图片处理服务绑定域名时提示:域名绑定在自己的其他Bucket上
对象存储OSS控制台操作—图片鉴黄
OSS上传图片时exif信息处理规则
PHP SDK 2.0.1是否支持图片处理服务
OSS 图片处理服务配置文件缓存的方法
怎样用多个域名来使用oss图片服务
图片处理服务处理后的PNG图片的透明背景变黑
OSS 图片处理如何保护原始图片不被访问
OSS图片处理访问报Forbidden access to the original image错误的处理方法
使用图片处理服务,原图无法访问。报错accessdenied。
OSS图片处理服务导致CORS配置失效
OSS图片处理URL访问报错NoSuchStyle, NoSuchKey, NoSuchFile
图片的原图是正常的,被图片处理后就旋转了,该怎样处理
OSS图片处理对原图和缩略图的限制说明
OSS 如何将图片强制缩放成正方形并且不裁剪
图片处理服务是否可以支持跨域操作
OSS上传图片访问URL返回http code值为403
错误原因
使用OSS Java SDK时,报类似如下错误,说明工程中可能有包冲突。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy
at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:77)
Caused by: java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more
或
Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56)
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:82)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:95)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:104)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:62)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:572)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:174)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:158)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:149)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:125)
at com.aliyun.oss.common.comm.DefaultServiceClient.createHttpClientConnectionManager(DefaultServiceClient.java:237)
at com.aliyun.oss.common.comm.DefaultServiceClient.<init>(DefaultServiceClient.java:78)
at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
at OSSManagerImpl.upload(OSSManagerImpl.java:42)
at OSSManagerImpl.main(OSSManagerImpl.java:63)
错误原因是OSS Java SDK使用了Apache httpclient 4.4.1,而您的工程使用了与Apache httpclient 4.4.1冲突的Apache httpclient或commons-httpclient jar包。要查看工程使用的jar包及版本,请在您的工程目录下执行
mvn dependency:tree
。如下图所示,您的工程里使用了Apache httpclient 4.3:
解决方法
包冲突有以下两种解决方法:
使用统一版本。如果您的工程使用与Apache httpclient 4.4.1冲突的版本,请您使用4.4.1版本,并在pom.xml删除其它版本的Apache httpclient依赖。如果您的工程使用了commons-httpclient,也可能存在冲突,请删除commons-httpclient。
解除依赖冲突。如果您的工程依赖多个第三方包,而第三方包又依赖不同版本的Apache httpclient,您的工程里会有依赖冲突,请使用exclusion解除。更多信息,请参见
Maven Guides
。
OSS Java SDK依赖以下版本的包,冲突解决办法与httpclient类似。
错误原因
使用OSS Java SDK时,报类似如下错误,说明您的工程中可能缺少编译或运行OSS Java SDK所必需的包。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/auth/Credentials
at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:76)
Caused by: java.lang.ClassNotFoundException: org.apache.http.auth.Credentials
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more
或
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/protocol/HttpContext
at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:76)
Caused by: java.lang.ClassNotFoundException: org.apache.http.protocol.HttpContext
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more
或
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/input/SAXBuilder
at com.aliyun.oss.internal.ResponseParsers.getXmlRootElement(ResponseParsers.java:645)
at … …
at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:471)
at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:465)
at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:82)
Caused by: java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 11 more
OSS Java SDK依赖下列包:
aliyun-sdk-oss-2.2.1.jar
hamcrest-core-1.1.jar
jdom-1.1.jar
commons-codec-1.9.jar
httpclient-4.4.1.jar
commons-logging-1.2.jar
httpcore-4.4.1.jar
log4j-1.2.15.jar
其中log4j-1.2.15.jar是可选的,需要日志功能的时候加入该包,其它包都是必需的。
解决方法
在您的工程中加入OSS Java SDK依赖的包。加入方法如下:
如果您的工程在Eclipse中,请参见
Java SDK使用手册
中的安装方式二。
如果您的工程在Ant中,请把OSS Java SDK依赖的包放入工程的lib目录中。
如果您直接使用.javac或.java文件,请使用
-classpath
或
-cp
命令指定OSS Java SDK依赖的包路径,或把OSS Java SDK依赖的包放入classpath路经下。
错误原因
运行OSS Java SDK程序时报如下类似错误,可能原因是Endpoint错误或者网络不通。
com.aliyun.oss.ClientException: SocketException
at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:71)
at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:116)
at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:121)
at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:67)
at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:92)
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:140)
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:111)
at com.aliyun.oss.internal.OSSBucketOperation.getBucketInfo(OSSBucketOperation.java:1152)
at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1220)
at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1214)
at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:94)
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to oss-test.oss-cn-hangzhou-internal.aliyuncs.com:80 [oss-test.oss-cn-hangzhou-internal.aliyuncs.com/10.84.135.99] failed: Connection timed out: connect
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:113)
... 9 more
解决方法
您可以使用
ossutil
工具快速定位错误原因并解决问题。
报错SignatureDoesNotMatch
错误原因1
AccessKey ID和AccssKey Secret不一致。
有关获取AccessKey ID和AccssKey Secret的操作步骤,请参见
创建AccessKey
。
错误原因2
签名URL使用不正确。错误示例如下:
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, object);
request.setExpiration( new Date(new Date().getTime() + 3600 * 1000));
request.addUserMetadata("author");
URL url = ossClient.generatePresignedUrl(request);
Map<String, String> header = new HashMap<String, String>();
header.put("author");
ossClient.putObject(url, new ByteArrayInputStream("Hello OSS".getBytes()), -1, header);
未指定Method参数时,默认使用GET方法。以上为PutObject请求,应指定Method参数并设置为PUT方法。
通过PutObject发送请求时,请求Header中自定义的元数据必须以
x-oss-meta-
为前缀。以上示例中自定义元数据应改为
x-oss-meta-author
。
解决方法:
指定Method,并修改Header:
request.addUserMetadata("author");
request.setMethod(HttpMethod.PUT);
URL url = ossClient.generatePresignedUrl(request);
Map<String, String> header = new HashMap<String, String>();
header.put("x-oss-meta-" + "author");
ossClient.putObject(url, new ByteArrayInputStream("Hello OSS".getBytes()), -1, header);
错误原因3
使用了低于3.7.0版本的OSS SDK,项目中引入了4.5.9及以上版本的httpclient。
上传的文件名中包含
+
字符,而4.5.9版本的httpclient不会对
+
进行URLEncode编码,从而造成客户端与服务端计算的签名不一致而报错。
解决方法:
OSS SDK建议升级为3.11.1及以上版本, 以兼容4.5.9版本的httpclient。
移除多余的httpclient依赖。引入OSS SDK时会自动引入httpclient依赖,如果是第三方库另外引入了httpclient,请参见
包冲突
解决方案。
错误原因4
HttpClient 4.5.10版本不支持Header中包含ISO/9959-1标准以外的字符,但在项目中引入了4.5.10以上的httpclient,并在请求Header中包含了ISO/9959-1标准以外的字符,例如
x-oss-meta-
开头的自定义元数据中传入了中文字符。
解决方法:
参见
包冲突
解决方案,移除冲突的httpclient版本。
在请求Header中传入符合ISO/9959-1标准的字符。
错误原因
客户端某些特殊的软件拦截了HTTP请求,或者公网路由劫持了HTTP请求。
在Java 11上使用OSS Java SDK,且未在pom.xml文件中添加JAXB相关依赖。
解决方法
切换为HTTPS请求。
添加JAXB相关依赖。操作步骤,请参见
安装SDK
。
org.apache.http.NoHttpResponseException: The target server failed to respond
错误原因
运行OSS Java SDK程序时,报类似如下错误:
使用过期的连接会导致上述错误,该错误仅在Java SDK 2.1.2之前的版本出现。
解决方法
请升级OSS Java SDK到2.1.2及以后版本。
JVM中存在大量org.apache.http.impl.conn.PoolingHttpClientConnectionManager实例
错误原因
ossClient没有关闭导致。
解决方法
主动关闭已执行完毕的ossClient或使用单例模式。
调用OSS Java SDK不响应
错误原因
调用OSS Java SDK不响应。通过
jstack -l pid
命令查看堆栈,问题出现在如下的位置:
"main" prio=6 tid=0x000000000291e000 nid=0xc40 waiting on condition [0x0000000002dae000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000007d85697f8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
at org.apache.http.pool.PoolEntryFuture.await(PoolEntryFuture.java:138)
at org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(AbstractConnPool.java:306)
at org.apache.http.pool.AbstractConnPool.access$000(AbstractConnPool.java:64)
at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:192)
at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:185)
at org.apache.http.pool.PoolEntryFuture.get(PoolEntryFuture.java:107)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:276)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:263)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:113)
at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:123)
at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:68)
at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:94)
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:146)
at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:113)
at com.aliyun.oss.internal.OSSObjectOperation.getObject(OSSObjectOperation.java:229)
at com.aliyun.oss.OSSClient.getObject(OSSClient.java:629)
at com.aliyun.oss.OSSClient.getObject(OSSClient.java:617)
at samples.HelloOSS.main(HelloOSS.java:49)
原因是连接池中连接泄漏,可能是使用ossObject后没有关闭。
解决方法
请检查您的程序,确保没有连接泄漏。关闭方法如下:
// 读取文件
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
// OSS操作
// 关闭ossObject
ossObject.close();
问题排查的具体步骤,请参见
OSS Java SDK不响应问题排查
。
错误原因
如果您在使用ossClient.getObject时,报类似如下错误:
Exception in thread "main" org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 11990526; received: 202880)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:180)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:200)
at org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:103)
at org.apache.http.impl.execchain.ResponseEntityProxy.streamClosed(ResponseEntityProxy.java:128)
at org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:228)
at org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:174)
at java.io.FilterInputStream.close(FilterInputStream.java:181)
at java.io.FilterInputStream.close(FilterInputStream.java:181)
at com.aliyun.oss.event.ProgressInputStream.close(ProgressInputStream.java:147)
at java.io.FilterInputStream.close(FilterInputStream.java:181)
at samples.HelloOSS.main(HelloOSS.java:39)
原因是两次读取数据间隔时间超过1分钟。OSS会关闭超过1分钟没有发送或接收数据的连接。
解决方法
如果您每次仅读取部分数据,且处理数据的时间不固定,建议使用指定范围读取,避免数据读取时连接关闭。更多信息,请参见
范围下载
。
错误原因
调用OSS Java SDK的程序,运行一段时间(根据业务量,几小时到几天不等)后内存泄露。 推荐使用
Eclipse Memory Analyzer (MAT)
分析内存使用情况。更多信息,请参见
使用MAT进行堆转储文件分析
。
如果分析结果类似下图所示(PoolingHttpClientConnectionManager占96%的内存),原因是程序中可能多次执行new OSSClient,但是没有调用ossClient.shutdown,造成内存泄漏。
解决方法
new OSSClient操作完成后,请通过shutdown进行关闭,保证new OSSClient和ossClient.shutdown成对使用。
调用ossClient.shutdown报异常InterruptedException
错误原因
OSS Java SDK 2.3.0之前的版本在调用ossClient.shutdown时报如下异常:
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at com.aliyun.oss.common.comm.IdleConnectionReaper.run(IdleConnectionReaper:76)
原因是ossClient后台线程IdleConnectionReaper会定时关闭闲置连接。IdleConnectionReaper在Sleep时,调用ossClient.shutdown,就会报上面的异常。
解决方法
使用如下代码,忽略该异常:
try {
ossClient.shutdown();
} catch(Exception e) {
请求出现异常“SDK.ServerUnreachable : Speicified endpoint or uri is not valid”
用户端并发请求STS过高。
网络到Server端超时。
所使用的STS SDK以及SDK core不是最新版本。
用户端并发请求STS过高,而用户端的ECS或者本地PC不足以承载当时的并发,降低OSS并发。
用户的网络到Server端有超时现象可以进行抓包验证。
建议将STS SDK及SDK core升级至最新版本。
出现问题时是否出现网络抖动。
主机的socket连接数是否占满。
确认出现问题时连接数是否超过SDK中设置的maxconnection,如果连接数超过maxconnection设置,也会出现socket异常。
如果以上都没有问题,建议您部署tcpdump或者wireshark抓包,问题复现后再分析数据包。
使用OSS PostObject的callback没有触发回调
使用OSS PostObject的callback没有触发回调,但是通过PutObject用同样的callback触发了回调。一般情况下,如果JSON格式有误或者回调失败,都会返回相应的消息,这里需要分别测试Put和Post回调效果:
发送请求时callback参数在file下面。
调整callback参数与file的位置。
此时测试结果显示业务服务器成功抓取请求。
Connection pool shut down
Caused by: java.lang.IllegalStateException: Connection pool shut down
at org.apache.http.util.Asserts.check(Asserts.java:34)
at org.apache.http.pool.AbstractConnPool.lease(AbstractConnPool.java:184)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.requestConnection(PoolingHttpClientConnectionManager.java:251)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:175)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:124)
at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:133)
... 8 more
错误原因
调用ossClient.shutdown()接口后,还继续通过ossClient发送请求。
解决方法
请检查调用逻辑,确保调用了ossClient.shutdown()接口之后,不再通过ossClient发送请求。
使用Java SDK的generatePresignedUrl生成的请求报错Request has expired
错误原因
int类型溢出,导致2038年时间戳问题。
超出URL设置的过期时间后发起上传请求。
解决方法
如果是int类型溢出,建议Java SDK中过期时长不要超过2038年。
如果因超出URL设置的过期时间后发起上传请求,建议设置合理的过期时间,确保过期时间大于您的发起请求时间。
报错Invalid Response或Implementation of JAXB-API has not been found on module path or classpath
错误原因
使用了Java 9以上的版本,并且没有添加JAXB依赖。
解决方法
关于如何添加JAXB依赖的更多信息,请参见
安装SDK
。
如何开启或关闭SDK日志
Apache Log4j定义了不同级别的日志,包括OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
通过配置log4j的属性选择开启或者关闭SDK日志:
更多错误排查,请参见
OSS错误响应
。