【最佳实践】OSS开源工具ossutil-上传性能调优

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 经常碰到内部同学或者外部客户问ossutil关于并发上传性能的问题。本文简单描述下ossutil并发上传原理并举例说明。 用户可从这里获取ossutil。 官网:https://help.aliyun.com/document_detail/50452.html代码:https://github.com/aliyun/ossutil 参数 --recursive 上传文件到oss时,如果file_url为目录,则必须指定--recursive选项,否则无需指定--recursive选项。

经常碰到内部同学或者外部客户问ossutil关于并发上传性能的问题。本文简单描述下ossutil并发上传原理并举例说明。

用户可从这里获取ossutil。

官网:https://help.aliyun.com/document_detail/50452.html
代码:https://github.com/aliyun/ossutil

参数

--recursive

  • 上传文件到oss时,如果file_url为目录,则必须指定--recursive选项,否则无需指定--recursive选项。
  • 从oss下载或在oss间拷贝文件时

    • 如果未指定--recursive选项,则认为拷贝单个object,此时请确保src_url精确指定待拷贝的object,如果object不存在,则报错。
    • 如果指定了--recursive选项,ossutil会对src_url进行prefix匹配查找,对这些objects批量拷贝,如果拷贝失败,已经执行的拷贝不会回退。

在进行批量文件上传(或下载、拷贝)时,如果其中某个文件操作失败,ossutil不会退出,而是继续进行其他文件的上传(或下载、拷贝)动作,并将出错文件的错误信息记录到report文件中。成功上传(或下载、拷贝)的文件信息将不会被记录到report文件中。

批量操作出错时终止运行的情况

  • 如果未进入批量文件迭代过程,错误已经发生,则不会产生report文件,ossutil会终止运行。如,用户输入cp命令出错时,不会产生report文件,而是屏幕输出错误并退出。
  • 如果批量操作过程某文件发生的错误为:Bucket不存在、accessKeyID/accessKeySecret错误造成的权限验证非法等错误,ossutil会屏幕输出错误并退出。

report文件名为:ossutil_report_日期_时间.report。report文件是ossutil输出文件的一种,被放置在ossutil的输出目录下,该目录的路径可以用配置文件中的outputDir选项或命令行--output-dir选项指定,如果未指定,会使用默认的输出目录:当前目录下的ossutil_output目录。

ossutil不做report文件的维护工作,请自行查看及清理用户的report文件,避免产生过多的report文件。

并发控制参数

  • --jobs选项控制多个文件上传/下载/拷贝时,文件间启动的并发数
  • --parallel控制上传/下载/拷贝大文件时,分片间的并发数。

默认情况下,ossutil会根据文件大小来计算parallel个数(该选项对于小文件不起作用,进行分片上传/下载/拷贝的大文件文件阈值可由--bigfile-threshold选项来控制),当进行批量大文件的上传/下载/拷贝时,实际的并发数为jobs个数乘以parallel个数。该两个选项可由用户调整,当ossutil自行设置的默认并发达不到用户的性能需求时,用户可以自行调整该两个选项来升降性能。

--bigfile-threshold参考详情,请参考ossutil大文件断点续传

--part-size选项

该选项设置大文件分片上传/下载/拷贝时,每个分片的大小。

默认情况下,不需要设置该值,ossutil会根据文件大小自行决定分片大小和分片并发,当用户上传/下载/拷贝性能达不到需求时,或有其他特殊需求时,可以设置这些选项。

如果设置了该选项(分片大小),分片个数为:向上取整(文件大小/分片大小),注意如果--parallel选项值大于分片个数,则多余的parallel不起作用,实际的并发数为分片个数。

如果将part size值设置得过小,可能会影响ossutil文件上传/下载/拷贝的性能,设置得过大,会影响实际起作用的分片并发数,所以请合理设置part size选项值。

性能调优

如果并发数调得太大,由于线程间资源切换及抢夺等,ossutil上传/下载/拷贝性能可能会下降,所以请根据实际的机器情况调整这两个选项的数值,如果要进行压测,可以一开始将两个数值调低,慢慢调大寻找最优值。

如果--jobs选项和--parallel选项值太大,在机器资源有限的情况下,可能会因为网络传输太慢,产生EOF错误,这个时候请适当降低--jobs选项和--parallel选项值。

如果文件数太多大小有不太平均,直接同时使用--jobs=3 --parallel=4进行设定(文件间并发为3,单文件内的并发为4),同时观察MEM, CPU,网络情况,若并未打满网络、占满CPU,则可以继续上调--jobs和--parallel。

真实案例

image

根据当时客户场景,下载速度大概在265M/s。

案例解析

在默认情况下,因为是多文件下载,所以会同时下载5个文件(version<=1.4.0,文件间的并发数为5)。

因为平均每个文件大小在1.1G,默认会为每个下载的文件开12个线程(单个文件内的并发数为12,在没有设置parallel参数和partsize参数时会根据文件大小计算出)。

那么在客户的环境里ossutil在运行期间至少有5*12= 60 个线程在跑。这么多并发应该会直接打满网卡,CPU应该也很拥挤。建议在并发下载时观察环境CPU,网络,进程/线程情况。

根据客户的截图,建议对每个文件分片100M~200M进行并发,比如设为100M每个分片,这样每个文件下载的并发数就是filesize/partsize。
ossutil cp oss://xxx xxx -r --part-size=102400000

如果文件数太多大小有不太平均,直接同时使用--jobs=3 --parallel=4进行设定(文件间并发为3,单文件内的并发为4)

总的建议就是:jobs * parallel 与CPU核数为1:1,2:1,但不要太大。

进一步解释

不是oss需要多少资源,是每个并发(读取文件,分片,上传等操作)所需的CPU,mem,网络等。

  • --jobs是多文件间的并发度,默认是5(version <= 1.4.0,之后是3)
  • --parallel是大文件内部分片并发度,在没有设置parallel参数和partsize参数时会根据文件大小计算出,最大不会超过15(version <= 1.4.0,之后是12)
  • 如果文件数太多大小又不太平均,可以同时使用--jobs=3 --parallel=4进行设定(文件间并发为3,单文件内的并发为4,具体数字根据机器情况调整)

小结

  • cp默认并发执行,cp大文件用分片并发下载,小文件用put;默认开启CRC校验。
  • 在oss间拷贝文件,目前只支持拷贝object,不支持拷贝未complete的Multipart。
  • 总的建议

    • jobs * parallel 与CPU核数为1:1,2:1,但不要太大
    • 并发数太多会直接打满网卡,CPU也会拥挤。建议在并发时观察环境CPU,网络,进程/线程情况

Reference

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
9月前
|
SQL 存储 监控
通过sdk查看oss投递(新版)延迟情况最佳实践
在投递任务中,日志服务会将运行日志写入到给定的logstore中,因而可以使用SDK来查看投递任务的当前状态,并进行批量查询,以了解多个Project和投递任务的状态。下面以查看oss投递的延迟为例,介绍客户提供操作步骤和常见的使用场景,以帮助客户更加方便地监控和管理投递任务。
通过sdk查看oss投递(新版)延迟情况最佳实践
|
存储 数据采集 运维
Alibaba Cloud Lens for OSS最佳实践
——其冀 阿里云智能产品专家
Alibaba Cloud Lens for OSS最佳实践
|
对象存储
oss 追加上传支持excel文件使用吗
oss 追加上传支持excel文件使用吗
|
存储 对象存储
oss区分存储怎么把图片压缩后再上传?
oss区分存储怎么把图片压缩后再上传?
842 0
|
对象存储 iOS开发
iOS开发:日志记录文件及压缩上传OSS
发现APP上传本地日志文件相当的好用,根据之前研究学习的对这一模块做了一些更具体的优化处理。从标题可以看出,实现这一功能分以下几个步骤: 1、日志记录本地文件 2、日志文件压缩[xx.zip] 3、压缩之后的文件上传 4、压缩文件删除
482 0
|
Linux Go 对象存储
ossutil迁移日志文件至阿里云OSS
ossutil支持在Windows、Linux、macOS等系统中运行,您可以根据实际环境下载和安装合适的版本。
526 0
|
SQL 分布式计算 关系型数据库
Hive 数仓迁移 JindoFS/OSS 数据湖最佳实践
Hive 数仓是大多数迁移客户都会遇到的场景。在迁移过程中,不建议同时在新集群进行业务升级(比如从 Hive on MR 迁移到 Hive on Tez 或 Spark SQL等),这些业务升级可以在迁移完成后进行。1. 元数据同步Hive 元数据是对于 Hive 表来说非常关键,除了表结构信息,里面还记录着 Hive 表与底层文件系统的关联关系,许多上层服务都依赖 Hive 元数据提供服务。a.
534 0
|
存储 SQL 机器学习/深度学习
OSS加速器最佳实践-总述篇
OSS加速器最佳实践(总述篇)本最佳实践提供OSS加速器相关的信息和适合的场景,面向对oss和数据湖相关技术有一定了解的开发者。     大家可以通过这俩篇先做一些了解相关文档:《配置OSS加速器》https://help.aliyun.com/document_detail/190726.html《OSS加速器介绍》https://developer.aliyun.com/article/780
OSS加速器最佳实践-总述篇
|
28天前
|
对象存储
minio临时凭证直传切换到阿里云oss
minio临时凭证直传切换到阿里云oss
57 1
|
2月前
|
Cloud Native Java 开发工具
云原生 阿里云分布式文件系统 对象存储OSS 服务配置
【1月更文挑战第8天】云原生 阿里云分布式文件系统 对象存储OSS 服务配置

相关产品

  • 对象存储