性能调优-ossutil 调优

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 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高负载。高负载可能需优化或扩容。根据负载级别,可调整资源配置、优化性能或使用自动伸缩服务,确保服务稳定和高效。
429 2
|
人工智能 达摩院 并行计算
中文语音识别转文字的王者,阿里达摩院FunAsr足可与Whisper相颉顽
君不言语音识别技术则已,言则必称Whisper,没错,OpenAi开源的Whisper确实是世界主流语音识别技术的魁首,但在中文领域,有一个足以和Whisper相颉顽的项目,那就是阿里达摩院自研的FunAsr。 FunAsr主要依托达摩院发布的Paraformer非自回归端到端语音识别模型,它具有高精度、高效率、便捷部署的优点,支持快速构建语音识别服务,最重要的是,FunASR支持标点符号识别、低语音识别、音频-视觉语音识别等功能,也就是说,它不仅可以实现语音转写,还能在转写后进行标注,一石二鸟。
中文语音识别转文字的王者,阿里达摩院FunAsr足可与Whisper相颉顽
|
存储 弹性计算 安全
对象存储OSS快速上手——ossutil工具管理OSS
本实验是对象存储OSS进阶实验。通过本实验,用户可学会如何使用ossutil工具在Linux环境下用命令管理oss,完成文件上传下载等操作。
|
6月前
|
人工智能 自然语言处理 并行计算
Chitu:清华核弹级开源!推理引擎3倍提速+50%省卡,国产芯片告别英伟达绑架
Chitu(赤兔)是清华大学与清程极智联合开源的高性能大模型推理引擎,支持多硬件适配,显著提升推理效率,适用于金融、医疗、交通等多个领域。
645 10
Chitu:清华核弹级开源!推理引擎3倍提速+50%省卡,国产芯片告别英伟达绑架
|
数据采集 JavaScript 前端开发
构建简易Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字信息的时代,数据抓取成为获取网络资源的重要手段。本文将引导你通过Python编写一个简单的网页爬虫,从零基础到实现数据抓取的全过程。我们将一起探索如何利用Python的requests库进行网络请求,使用BeautifulSoup库解析HTML文档,并最终提取出有价值的数据。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你打开数据抓取的大门。
|
存储 Linux Docker
备份和迁移Docker容器
【8月更文挑战第21天】在Linux系统中,备份与迁移Docker容器可通过以下步骤实现:首先,查找并记录需备份容器的ID或名称;其次,若容器正在运行,则需先停止;最后利用`docker export`命令将其导出为tar归档文件以完成备份。对于容器迁移,有两种常见方式:一是直接迁移备份文件至目标服务器,并通过`docker import`命令导入新容器;二是通过创建容器镜像,并推送至镜像仓库,之后在目标服务器上拉取该镜像并运行。值得注意的是,在进行容器迁移时应确保Docker版本兼容,同时关注数据存储、网络配置及权限设置等问题,以保障容器功能正常运作。
1220 2
|
应用服务中间件 nginx Docker
nginx反向代理踩坑(容器方式)
nginx反向代理踩坑(容器方式)
452 0
|
存储 监控 Ubuntu
Linux的几种备份、恢复系统方式
Linux的几种备份、恢复系统方式
|
安全 Java 网络安全
对象存储oss使用问题之使用oss上服务器后显示服务异常如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
1911 0
|
机器学习/深度学习 自然语言处理 算法
【ACL2023】基于电商多模态概念知识图谱增强的电商场景图文模型FashionKLIP
从大规模电商图文数据中自动化构建多模态概念级知识图谱的方案,随后将概念级多模态先验知识注入到VLP模型中,以实现跨模态图文样本在概念层面进一步对齐。