性能调优-ossutil 调优

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 使用 osstuil 工具遇到隐藏的性能提升参数,和排查小技巧;

ossutil 能做什么

功能概述

ossutil 是 go 编写的命令行高效快捷工具,工具执行效率、支持功能、容错功能无疑是运维必备首选,同时在弱网条件下支持探测模式,测试客户端的网络上下行速率;

  • ossutil 专司于高并发大文件或小文件读写的场景,同时支持大文件内部进行分片时的并发;
  • 操作文件时可以支持 include exinclude 参数,指定哪些后缀的文件可被操作;
  • 只显示当前的层级的目录,可选择性的进行递归;
  • 伴随 Linux 系统本身的 crontab 使用支持,强制更新 -f -u 参数;
  • 限制 ossutil 的操作速度;

支持选项

Commands:

  • mb cloud_url [options]

      创建Bucket
  1. [cloud_url] [options]

      列举Buckets或者Objects
  2. cloud_url [options]

      删除Bucket或Objects
  3. cloud_url [options]

      显示bucket或者object的描述信息

    set-acl cloud_url [acl] [options]

      设置bucket或者objects的acl

    set-meta cloud_url [meta] [options]

      设置已上传的objects的元信息
  4. src_url dest_url [options]

      上传,下载或拷贝Objects
  5. cloud_url [options]

      恢复冷冻状态的Objects为可读状态

    create-symlink cloud_url target_url [options]

      创建符号链接

    read-symlink cloud_url [options]

      读取符号链接文件的描述信息
  6. cloud_url [meta] [options]

      生成object下载链接
  7. file_name [options]

      探测命令,支持多种功能探测
  8. dir_name [options]

      创建一个目录,在oss中目录名字有后缀字符'/'
  9. bucket_url [local_xml_file] [options]

      设置、查询或者删除bucket的cors配置
  10. src_bucket_url target_bucket_url [options]

      设置、查询或者删除bucket的log配置
  11. bucket_url referer [options]

      设置、查询或者删除bucket的referer配置
  12. oss_object uploadid [options]

      列出没有完成分块上传的object的分块信息
  13. bucket_url [options]

      获取bucket所有未完成上传的multipart object的分块大小以及总和
  14. local_file_name oss_object [options]

      将本地文件内容以append上传方式上传到oss中的appendable object中
  15. object [options]

      将文件内容输出到标准输出

    bucket-tagging bucket_url [tag_parameter] [options]

      设置、查询或者删除bucket的tag配置

    bucket-encryption bucket_url [options]

      设置、查询或者删除bucket的encryption配置

    cors-options oss_url [options]

      向oss发送http options请求,用于CORS检测
  16. bucket_url local_xml_file [options]

      设置、查询或者删除bucket的lifecycle配置
  17. bucket_url local_xml_file [options]

      设置、查询或者删除bucket的website配置

    bucket-qos bucket_url [local_xml_file] [options]

      设置、查询或者删除bucket的qos配置

    user-qos [local_file] [options]

      查询用户的qos配置

    bucket-versioning bucket_url [versioning_parameter] [options]

      设置、查询bucket的versioning配置
  18. bucket_url [options]

      获取bucket或者指定前缀(目录)所占的存储空间大小

    bucket-policy bucket_url [local_json_file] [options]

      设置、查询或者删除bucket的policy配置

    request-payment bucket_url [payment_parameter] [options]

      设置、查询bucket的访问者付费配置

    object-tagging cloud_url [tag_parameter] [options]

      设置、查询或者删除object的tag配置
    

Additional Commands:
help [command]

    获取命令的帮助文档

config [options]

    创建配置文件用以存储配置项

hash file_url [options]

    计算本地文件的crc64或md5

update [options]

    更新ossutil
    

场景分类

ossutil help

拷贝单个小文文件

ossutil cp $localfile oss://$bucket/ -i $AccesskeyID -k $AccesskeySecretkey -e $endpoint

递归拷贝本地目录小文件到 oss

ossutil cp -r $local_path oss://$bucket/ -i $AccesskeyID -k $AccesskeySecretkey -e $endpoint

拷贝单个大文文件

ossutil cp $localfile oss://$bucket/ --part-size=50000000 --bigfile-threshold=54857600 --parallel=5 -i $AccesskeyID -k $Accesskey Secretkey -e $endpoint

递归拷贝本地目录大文件到 oss

ossutil cp $localfile oss://bucket/ --part-size=50000000 --bigfile-threshold=54857600 --jobs=20 --parallel=5 -i $AccesskeyID -k $AccesskeySecretkey$ -e $endpoint

常见问题

oss 上传下载慢

1、如果能稳定复现可以用 --loglevel 参数 debug 请求过程,将记录的 OSS 返回的 requestID 反馈到阿里云售后排查;

2、客户可以使用 probe 探测命令生成一个网络探测报告,通过检测结果看下客户端网络是否存在慢请求的问题;

3、如果客户端是 ECS ,并且和 OSS 是同 region ,可以使用内网的 endpoint 进行传输,内网传输速率一般可以达到 50M -100M 左右(自己测试),比如北京的 OSS 内网 endpoint 就是 oss-cn-beijing-internal.aliyuncs.com

4、客户端可以在使用上面推荐的大文件见分片上传,下载的功能,如果文件数量多,可以同时增加并发参数提高网络吞吐;

5、如果客户端还是存在慢的问题,可以用 wireshark 或者 tcpdump 抓包分析下找出慢的瓶颈;

ossutil 出现 skip 情况

[root@iZ2Sv4olcc4Z opt]# echo “testlil” >  dskydb/test.txt
[root@iZ25v4olcc4Z opt]# ./ossutil64 cp -rt -c ~/.ossuti.Lcofig dskyclb/test.txt oss://gres/test.txt
Succeed: Total nun: 1, $ze: 30. OK nun: 1(upload 1 files).
0.372650(s) elapsed I
[root@iZ2Sv4olcc4Z opt] echo " ttest222r" >> dskydb/test.txt
[root@iZ2Sv4olcc4Z opt]. /ossutil64 cp —u —c ~/.ossutilconfig cbkydb/test.txt oss://gres/test.txt
Succeed: Total num: 1, ize: 38. OK nun: l(skip 1 files), Skip sin 38.
0.252878(s) elapsed

1、使用 -u 强制更新时,重新对所有的上传文件和原的进行一次比对,发现美有更改的情况就会跳过,有发生更改的就会触发上传进行覆,正常情况。

2、遇到这种情况可以看下本地的 log 哪些文件被跳过了,将 oss 存储的文件和本地文件做个 MD5 比对确保文件是一致。

3、命令:./ossutil64 cp -u -r -f aa.test oss://alihua -i $accesskeyID -k $accesskeyIDSecret -e $endpoint

ossutil 访问出现 403

image.png

如图用户在操作解冻文件的过程中出现 403,可能与两个原因有关系

1、用户使用的子账号操作文件,权限不够。

2、用户的文件是违禁内容被封禁掉了。

3、遇到 403 时,递归解冻会中断不会继续。这种现象是正常的,工具在设计之初就是考虑到如果文件遇到 403 的话,代表没有权限操作该文件,那么通过该账号下的其他文件也操作不了,所以就会中断退出。

访问 OSS 出现 400

image.png

检查用户的命令和官方提供的命令是否完全一致,避免误操作。
使用 stat 选项看一下文件的状态是否是已经解冻了,如果以及解冻再次操作,就会出现 400。

The operation is not valid for the object's state

出现这个问题是因为用户操作的文件是一个归档的文件,不能直接操作,需要先进行解冻 restore 的操作后才能使用。

  • ossuti64 restore oss://bucket/prefix/object -I $accesskey -k $secretkey -e $endpoint
  • 递归解冻 ossuti64 restore oss://bucket/prefix/ -r -I $accesskey -k $secretkey -e $endpoint

上传速率不稳定

Windows ossutil 上传 OSS 速率慢不稳定,客户端是在河北公网,目标服务端是北京,存在跨省情况;
首先了解下用户在公网情况下,能否切换到同 region 的 OSS 上进行访问,同 region 的 OSS 内网是有阿里环网组成,如果客户只能在公网使用,进行下面的排查。

image.png

公网情况:

首先看下用户端 ping OSS 的完整域名的网络 ping 值是否正常,tracert 是否有延迟抖动,此步骤可以通过脚本来做,下载脚本后运行,直接输入完整的 OSS 域名即可:测试脚本

1、脚本中是 ping 的是大包 1460,发现用户端直接网络超时,此时怀疑是客户的网络有限制或者网络拥塞,但是 tracert 通的,再进行下一步排查;

image.png

2、尝试降低 ping 包的 len 发现到 1412 ping 可以通过,说明客户端在网络上做限制,不允许 1460 大包的传输,影响了客户端的上行网络吞吐量;

image.png

尝试检查本机的网络负载

1、通过本机资源监控看用户端当时的 CPU 负载和本机内存占用较高,实际登陆到客户端机器上发现系统卡顿,实际资源监控器看到 ossutil 工具线程并没有跑到和设置的 --job=10 --parallel=10 (10*10=100)一样,只是运行了 24 个,说明工具的线程受到了系统 CPU 调度影响,无法将网络吞吐打上去,于是让用户关系了一些占用 CPU 内存较高的应用后,ossutil 线程数终于打到 69;

调整前的测试

image.png

调整后的测试

image.png

灵活调整 ossutil 的线程数和分片的并发数;

--bigfile-threshold=52428800 --jobs=10 --parallel=50 --part-size=52428800

1、遇到大文件数量多,以及单一的大文件时我们要灵活调整 ossutil 的相关参数能够提高我们的 ossutil 的效率;
2、比如这个案例中客户的文件大小平均是 100M 以上,而且客户的出口带宽是共享 200M ,也就是客户自己的上线速度理论上也要 20M;
3、针对这种情况,我们可以把分片大小调整为 50M-10M,同时增加 parallel 分片的并发数量,尽可能的打满上行的吞吐。当客户端 CPU 核心比较少的时候不建议分的太小,比如分到 1M 时就会造成 CPU 切片过快,消耗 CPU 计算,影响系统性能。
4、如果遇到文件数量单一大文件,或者小文件时,可以不用加任何参数,直接上传即可;调整完成后用户的上行出口速率能打到 10M 大 B。

对比其他家的工具

比如七牛的 qfetch 以及 qshell 做了性能对比,上行的传输效率相差并不多,并没有用户反馈了七牛 20M (大B)阿里云 4M(大B),基本上qshell 和 qfetch 的效果都是稳定在 10M 左右;

总结以及需要解决问题

1、当使用 ossbrower 上传速度低时可以切换到 ossutil 这个高效的工具进行测试;

2、需要用户解决下为什么网络出口限制的大包(1460) 的传输,这个问题不解决很难将网络带宽吞吐提上去。
尽量本机不要在负载高的情况下上传一些大文件,如果传输的话可以关闭一些应用卡顿的程序,或者降低下 ossutil 工具的并发线程数量,不然即使设置了 100 ,但实际受到系统的 CPU 调用影响,不一定能跑到 100 。降低线程数,上传的效率也会受到影响;

相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
目录
相关文章
|
Java API 开发工具
如何用阿里云 oss 下载文件
阿里云对象存储服务(OSS)提供了多种方式下载文件,以下讲解下各种方式的下载方法
13040 2
|
Ubuntu
ubuntu 22.04 阿里源
ubuntu 22.04 阿里源
17345 0
|
网络协议 Java 开发工具
【 OSS 排查方案-9 上传 OSS 延迟超时】
基础排查 一、 上传 OSS 出现慢的场景,OSS 会返回一个 requestID 属性,请保留这个 requestID 这是 OSS 所有信息的查询入口,升级阿里云时可以快速定位问题,如果上传超时的话时没有这个属性的。
11724 1
|
Kubernetes 关系型数据库 网络架构
ray集群部署vllm的折磨
概括如下: 在构建一个兼容多种LLM推理框架的平台时,开发者选择了Ray分布式框架,以解决资源管理和适配问题。然而,在尝试集成vllm时遇到挑战,因为vllm内部自管理Ray集群,与原有设计冲突。经过一系列尝试,包括调整资源分配、修改vllm源码和利用Ray部署的`placement_group_bundles`特性,最终实现了兼容,但依赖于非官方支持的解决方案。在面对vllm新版本和Ray部署的`reconfigure`方法问题时,又需权衡和调整实现方式。尽管面临困难,开发者认为使用Ray作为统一底层仍具有潜力。
|
运维 监控 安全
【ELK入门】Elastic中文社区运维监控实战之架构篇
阿里云MVP曾勇撰写的《ELK运维监控入门实战》系列,以Elasticsearch中文社区网站运维监控体系搭建作为案例,讲解了ELK监控系统的相关原理和技术实现,可作为对ELK感兴趣的同学的入门级文章。本篇作为第一篇,介绍了项目背景和技术架构。
7369 0
|
存储 缓存 芯片
|
Cloud Native 安全 Java
架构简洁之道:从阿里开源应用架构 COLA 说起
COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA 做了一次“升级”,在这次升级中,没有增加任何新的功能,而是尽量多删减了一些概念和功能,让 COLA 更简洁有效。
15249 1
架构简洁之道:从阿里开源应用架构 COLA 说起
|
Arthas SQL 监控
重启大法好!线上常见问题排查手册
本文从线上实际问题和故障的排查出发,分享如何快速定位和恢复线上常见问题和故障,总结了很多实操的方法,希望对大家有用。
10887 3
重启大法好!线上常见问题排查手册
|
容器 双11 Cloud Native
重磅发布 | 《不一样的 双11 技术,阿里巴巴经济体云原生实践》电子书开放下载
2019 双11,订单创新峰值达到 54.4 万笔/秒,单日数据处理量达到 970PB,面对世界级流量洪峰,今年的阿里巴巴交出了一份亮眼的云原生技术成绩单,并实现了100% 核心应用以云原生的方式上云: 双11 基础设施 100% 上云 支撑 双11 在线业务容器规模达到 200 万 采用神龙弹性裸金属服务器计算性价比提升 20%  这些数据背后是对一个个技术问题的反复尝试与实践。
46644 0
重磅发布 | 《不一样的 双11 技术,阿里巴巴经济体云原生实践》电子书开放下载
|
对象存储
【最佳实践】OSS开源工具ossutil-上传性能调优
经常碰到内部同学或者外部客户问ossutil关于并发上传性能的问题。本文简单描述下ossutil并发上传原理并举例说明。 用户可从这里获取ossutil。 官网:https://help.aliyun.com/document_detail/50452.html代码:https://github.com/aliyun/ossutil 参数 --recursive 上传文件到oss时,如果file_url为目录,则必须指定--recursive选项,否则无需指定--recursive选项。
9838 0

热门文章

最新文章