性能调优-ossutil 调优

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储OSS,敏感数据保护2.0 200GB 1年
对象存储 OSS,内容安全 1000 次 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 。降低线程数,上传的效率也会受到影响;

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
目录
相关文章
|
存储 弹性计算 缓存
ecs负载评估
ECS负载评估基于资源综合性能得分,衡量CPU、内存、磁盘I/O、网络和系统负载等指标。得分0-5为低负载,5-80正常,80-100高负载。高负载可能需优化或扩容。根据负载级别,可调整资源配置、优化性能或使用自动伸缩服务,确保服务稳定和高效。
437 2
|
存储 弹性计算 安全
对象存储OSS快速上手——ossutil工具管理OSS
本实验是对象存储OSS进阶实验。通过本实验,用户可学会如何使用ossutil工具在Linux环境下用命令管理oss,完成文件上传下载等操作。
|
存储 缓存 JSON
微信小程序使用本地存储方法
微信小程序使用本地存储方法
564 1
|
6月前
|
人工智能 自然语言处理 并行计算
Chitu:清华核弹级开源!推理引擎3倍提速+50%省卡,国产芯片告别英伟达绑架
Chitu(赤兔)是清华大学与清程极智联合开源的高性能大模型推理引擎,支持多硬件适配,显著提升推理效率,适用于金融、医疗、交通等多个领域。
651 10
Chitu:清华核弹级开源!推理引擎3倍提速+50%省卡,国产芯片告别英伟达绑架
|
10月前
|
人工智能 自然语言处理 并行计算
探索大模型部署:基于 VLLM 和 ModelScope 与 Qwen2.5 在双 32G VGPU 上的实践之旅
本文介绍了使用 `VLLM` 和 `ModelScope` 部署 `Qwen2.5` 大模型的实践过程,包括环境搭建、模型下载和在双 32G VGPU 上的成功部署,展现了高性能计算与大模型结合的强大力量。
2600 3
|
网络协议 Dubbo 应用服务中间件
实操指南:Postman 怎么调试 WebSocket
WebSocket 是一个支持双向通信的网络协议,它在实时性和效率方面具有很大的优势。Postman 是一个流行的 API 开发工具,它提供了许多功能来测试和调试 RESTful API 接口,最新的版本也支持 WebSocket 接口的调试。想要学习更多关于 Postman 的知识,可访问 Postman 中文文档。在本文中,我们将介绍如何使用 Postman 调试 WebSocket 接口。
|
应用服务中间件 nginx Docker
nginx反向代理踩坑(容器方式)
nginx反向代理踩坑(容器方式)
456 0
|
存储 监控 Ubuntu
Linux的几种备份、恢复系统方式
Linux的几种备份、恢复系统方式
|
机器学习/深度学习 自然语言处理 算法
【ACL2023】基于电商多模态概念知识图谱增强的电商场景图文模型FashionKLIP
从大规模电商图文数据中自动化构建多模态概念级知识图谱的方案,随后将概念级多模态先验知识注入到VLP模型中,以实现跨模态图文样本在概念层面进一步对齐。
|
缓存 Java Linux
Linux系统内存使用率与top进程展示使用率不一致问题
使用top/htop工具查看的内存占用率与free/云监控不一致问题
Linux系统内存使用率与top进程展示使用率不一致问题