【OSS 排查方案-1】OSS 工具使用排查方案标准化

背景:针对使用 oss 工具出现疑问的用户,将自己经常遇到的问题解法 share 一下。


请大家在解决问题之前先做下必要的核对工作

  • 是否是官网的最新版本 https://help.aliyun.com/document_detail/50452.html?spm=5176.doc31935.6.1056.TcGyZr。
  • 使用 oss 工具下载服务端文件时如果出现异常,可以先尝试 curl 下远端的文件看是否正常(curl -svo /dev/null http://object )
  • 如果是 ossimport 工具使用出现问题,请先按照 https://help.aliyun.com/document_detail/56990.html?spm=5176.product31815.6.1063.1AEmbe 确认自己的配置文件选项是符合业务情况且正确的。
  • 使用 oss 工具异常时一般会有明显的 message 和 requestID 回显在终端上,除非建联失败的情况下是没有 requestID 。拿到的 message 后可以到  help.aliyun.com 通过关键字检索答案,如果排查困难可以提交阿里云售后,将异常信息和能获取到的 requestID 反馈对方排查。
  • 如果遇到 SDK 、API、操作出现问题,可以先是用 ossutil 工具来测试是否可以正常操作,以排除是 oss 服务端问题还是 SDK、API 代码写的问题。

一、ossimport 单机/集群 版本出现异常
  • 优先按照 https://help.aliyun.com/document_detail/56990.html?spm=5176.product31815.6.1063.1AEmbe 检查配置文件是否服务业务场景且正确无误。
  • 单机版的情况,一个 ECS 上只有一个 worker ,但是拆分成多个 task 对应的多线程进行文件迁移,而且注意不需要配置 workers 文件。
  • 集群版本的注意要配置配置 workers ip 文件,而且第一行要填写 master ip  然后是 slave ip。
  • ossimport 没有进度条功能,终端上输出的内容就带有完成的任务数,或者通过我们的  logs/import.log 日志 查看当前上传情况。
  • ossimport 迁移的 object 中不要带有空格,比如(bucket/dir/ haoting.mp3)
ossimport  迁移中出现 overlappinglockfileexception

【OSS 排查方案-1】OSS 工具使用排查方案标准化

A:出现这种问题,基本都是由于线程数量较多,master 进程对文件扫描的过快导致,但不会影响 ossimport 迁移,目前新版本中已经隐掉了该问题。

ossimport  多个迁移项目任务一起跑,原来的进程被踢掉

【OSS 排查方案-1】OSS 工具使用排查方案标准化

A:ossimport 工具单机版只能有一个 worker 进程,多个线程的方式迁移,启动多个脚本是不可以的,需要迁移多个项目,可以采用分布式版本的,将任务下发到不同的机器 worker 中执行。

ossimport  出现 workips empty 

【OSS 排查方案-1】OSS 工具使用排查方案标准化

A:出现这种问题,先确认使用的是单机版还是集群版,如果是分布式版本,如果是单机版,请查看是否存在 workers 的这文件,如果存在删除掉,单机版不会有这个文件。如果是分布式版本,请检查自己的 workers 文件中是否配置了 master IP。

二、ossutil 工具使用异常
  • 保证工具的版本是最新的。
  • 使用 ossutil 工具操作 oss 文件时可以增加 --retry-time 选项增加重试机制。
  • 使用 ossutil 解冻文件时,如果文件出现异常,可以优先使用 stat 选项查看文件的状态。
  • 异常时排查困难,请保留好异常 message 和 requestID 反馈给阿里云客服人员。

ossutil 工具上传中发现,有 skip 的情况,而且使用 -u 参数后 OSS 的文件没有被更新。

【OSS 排查方案-1】OSS 工具使用排查方案标准化

A:出现 skip ,由于之前操作的是同名文件,加 -u 后,强制更新了文件,跳过了更新的过程。
如果怀疑文件没有被更新,可以先固定 OSS 端下载文件,然后和本地的 MD5 值比对,如果 MD5 值一致则证明文件被更新,如果文件 MD5 值不一致则
文件没有更新。
测试命令如下 
./ossutil64 cp -u -r -f aa.test oss://bucket --access-key-secret=xxx --access-key-id=xx
测试 OSS  MD5 : curl -v http://oss资源/xxx | md5sum

ossutil 操作解冻文件出现 403

【OSS 排查方案-1】OSS 工具使用排查方案标准化

如图在操作解冻文件的过程中出现 403,可能与以下几个原因有关系
1)使用的子账号操作文件,权限不够。需要看是用的是 STS 操作还是直接用 RAM 子账户操作,核实好对应的 oss 读写权限。
2)用户的文件是违禁内容被封禁掉了
3)用户的文件可能是归档的文件不可以直接被访问。

ossutil cp 文件时出现 403 会中断

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

ossutil 解冻文件出现 400

【OSS 排查方案-1】OSS 工具使用排查方案标准化

1)使用 stat 选项看一下文件的状态是否是已经解冻了,如果以及解冻再次操作,就会出现 400


三、ossfs 使用问题:

  • ossfs 的报错都会有明显的 message,需要收集到这些 message,根据 message 判断是否直接看出问题,比如 socket 建联失败,或者响应的状态码 4XX 5XX 等,一般 403 是权限问题被 deny ,400 是用户的操作方法有误,5xx 一般和网络抖动以及服务端业务有关系,遇到 5xx 如果长时间无法恢复,需要反馈到阿里云客服,看下是否服务故障。
  • 如果使用 ossfs 发现性能很差,建议替换使用 ossutil,应为 ossfs 是将远端的 OSS 挂载到本地磁盘,如果对业务性能敏感性很高的业务,不建议使用 ossfs ,而且该工具也不是原子性,存在本地操作成功,但 oss 远端操作失败的风险。
  • 如果发现 ossfs 在 ls 目录文件时很慢,可以增加调优参数 通过 -omax_stat_cache_size=xxx 参数增大 stat cache 的 size,这样第一次 ls 会较慢,但是后续的 ls 就快了
安装 ossfs fuse 出现报错。

【OSS 排查方案-1】OSS 工具使用排查方案标准化

出现这种问题都是 fuse 的版本不满足 ossfs 的要求,2.8.3 的都不行,直接去 fuse 链接上下载最新版本的编译安装,不要用 yum, yum 安装的都不是新版
参考链接:https://github.com/libfuse/libfuse

ossfs 使用中出现 Input/output error

【OSS 排查方案-1】OSS 工具使用排查方案标准化

ossfs 与 rsync 同步使用会出现问题,而且用户对一个 141G 的文件进行 CP 操作,对 OSSFS 本身的磁盘读写比就是一个挑战,
如果想要将 OSS 下载到本地 ECS ,或者本地上传到 ECS ,可以通过 OSSUNTIL 的分片上传、下载进行操作。

四、ossftp 使用问题

1、由于 OSSFTP 是串行,而且是 FTPCLIET->FTPSERVER->OSS SERVER 两段操作性能无法保证,已经和客户沟通,推荐使用 ossutil ,链接:https://help.aliyun.com/document_detail/50452.html?spm=5176.doc31935.6.1032.YMtcGp'1、由于' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

2、OSSFTP 是 Python 编写,只能跑在单核上,并不是并发多核心处理任务,所以针对大文件 IO 操作时无法保证性能。












上一篇:android 异步图片处理 工具类


下一篇:如何在MaxCompute上处理存储在OSS上的开源格式数据