开发者社区> 问答> 正文

OSS Java SDK 调优有哪些?

OSS Java SDK 调优有哪些

展开
收起
1358896759097293 2021-03-11 10:12:21 1043 0
1 条回答
写回答
取消 提交回答
  • 45271990@qq.com

    环境准备 ● 使用 Java 1.8 及以上版本。 ● 查看版本执行 命令 java -version 查看 Java 版本 下载 SDK ● 直接通过 GitHub 下载 ● 安装 SDK,在 Maven 项目中加入依赖项(推荐方式) com.aliyun.oss aliyun-sdk-oss 2.8.3 初始化的参数设置 日志调优参数 一般情况下不会开启日志功能,很多用户都是开启日志 log4j 后写变慢了;网上 有很多关闭的方法可以找下开源的处理文档关闭掉,如果用户配置了 log4j 的属性文 件,需要在那个属性文件里 配置 oss 的 日志级别。 超时参数设置 弱网的环境下最好将超时时间设置长一些,增加重试次数,避免上传失败。

    // 创建 ClientConfiguration。ClientConfiguration 是 OSSClient 的配置类,可配置代理、
    连接超时、最大连接数等参数。
    ClientConfiguration conf = new ClientConfiguration();
    // 设置 OSSClient 允许打开的最大 HTTP 连接数,默认为 1024 个。
    conf.setMaxConnections(2048);
    // 设置 Socket 层传输数据的超时时间,默认为 50000 毫秒。
    conf.setSocketTimeout(10000);
    // 设置建立连接的超时时间,默认为 50000 毫秒。
    conf.setConnectionTimeout(10000);
    // 设置从连接池中获取连接的超时时间(单位:毫秒),默认不超时。
    conf.setConnectionRequestTimeout(1000);
    // 设置连接空闲超时时间。超时则关闭连接,默认为 60000 毫秒。
    conf.setIdleConnectionTime(10000);
    // 设置失败请求重试次数,默认为 3 次。
    conf.setMaxErrorRetry(5);
    网络流传输
    用户采用网络流传输,SDK 会通过公网先拉源文件,如果源拉文件很慢,直接
    影响到写 OSS 速度,尽量不要通过网络流上传文件,尽量使用本地上传。如果要用
    网路流的方式传输,先保证源文件网络的通畅和带宽充足。
    // Endpoint 以杭州为例,其它 Region 请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云主账号 AccessKey 拥有所有 API 的访问权限,风险很高。强烈建议您创建并使用 RAM 账号进
    行 API 访问或日常运维,请登录 https://ram.console.aliyun.com 创建 RAM 账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    // 创建 OSSClient 实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
    // 上传网络流。
    InputStream inputStream = new URL("https://www.aliyun.com/").openStream();
    ossClient.putObject("<yourBucketName>", "<yourObjectName>", inputStream);
    // 关闭 OSSClient。
    ossClient.shutdown();
    
    

    主机文件描述符 用户使用 SDK 配置的 connection 代表应用层处理的最大能力,要和主机的文 件描述符相对成,如果主机设置的 FD 是 1000 ,SDK 应用层即便设置到 2000,最 后效果也达不到 2000 ,最多只能处理 1000 个连接。 代码优化 java SDK 在 分片的基础上增加了断点传输,既可以在分片基础上增加并发,也 支持断点记录的功能,在遇到网络问题断开时不需要每次从文件开始重传,从记录断 点的位置继续传输。 分片大小建议 100M,1M 分片 1000M,10M 分片 10G,100M 分片 100G,1G 分片 setPartSize 设置分片大小,默认 1M

    // Endpoint 以杭州为例,其它 Region 请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云主账号 AccessKey 拥有所有 API 的访问权限,风险很高。强烈建议您创建并使用 RAM 账号进
    行 API 访问或日常运维,请登录 https://ram.console.aliyun.com 创建 RAM 账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    // 创建 OSSClient 实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, 
    accessKeySecret);
    ObjectMetadata meta = new ObjectMetadata();
    // 指定上传的内容类型。
    meta.setContentType("text/plain");
    // 通过 UploadFileRequest 设置多个参数。
    UploadFileRequest uploadFileRequest = new 
    UploadFileRequest("<yourBucketName>","<yourObjectName>");
    // 通过 UploadFileRequest 设置单个参数。
    // 设置存储空间名称。
    //uploadFileRequest.setBucketName("<yourBucketName>");
    // 设置文件名称。
    //uploadFileRequest.setKey("<yourObjectName>");
    // 指定上传的本地文件。
    uploadFileRequest.setUploadFile("<yourLocalFile>");
    // 指定上传并发线程数,默认为 1。
    uploadFileRequest.setTaskNum(5);
    // 指定上传的分片大小,范围为 100KB~5GB,默认为文件大小 /10000。
    uploadFileRequest.setPartSize(1 * 1024 * 1024);
    // 开启断点续传,默认关闭。
    uploadFileRequest.setEnableCheckpoint(true);
    // 记录本地分片上传结果的文件。开启断点续传功能时需要设置此参数,上传过程中的进度信息会保存
    在该文件中,如果某一分片上传失败,再次上传时会根据文件中记录的点继续上传。上传完成后,该文件
    会被删除。默认与待上传的本地文件同目录,为 uploadFile.ucp。
    uploadFileRequest.setCheckpointFile("<yourCheckpointFile>");
    // 文件的元数据。
    uploadFileRequest.setObjectMetadata(meta);
    // 设置上传成功回调,参数为 Callback 类型。
    uploadFileRequest.setCallback("<yourCallbackEvent>");
    // 断点续传上传。
    ossClient.uploadFile(uploadFileRequest);
    // 关闭 OSSClient。
    ossClient.shutdown();
    
    2021-03-14 22:49:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载