Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v7.9.7 上传问题 #32

Open
suconghou opened this issue Jul 15, 2021 · 10 comments
Open

v7.9.7 上传问题 #32

suconghou opened this issue Jul 15, 2021 · 10 comments
Labels

Comments

@suconghou
Copy link

从v7.9.5升级到最新 v7.9.7 后, 服务频繁OOM, 查看最近SDK源码后,发现新增了 ioutil.ReadAll, 将用户上传的数据一次性读入内存. 针对小文件还好,稍大一点的文件就非常占用内存.原先只需要不到100M内存的服务,现在至少需要1G内存. (而且这个策略还额外造成了整体上传的延时)
感觉明显是一个倒退,如果是为了重试,希望可以把是否重试的开关交给用户选择.

@bachue
Copy link
Contributor

bachue commented Jul 15, 2021

@suconghou 请问你是用什么 API 上传文件的?我们最近确实修改了表单上传的逻辑,将文件内容完整加载到本地内存,表单上传用于 4M 以下小文件,一般不会导致内存不够的问题。大文件推荐使用分片上传,最近也没有什么变更。

@suconghou
Copy link
Author

@bachue 我们的主要场景是10M - 20M 的高清图片和一些 100M 左右的小视频,之前一直也是用表单上传,运行良好,只升级了一下版本,服务就崩了.

@suconghou
Copy link
Author

几十兆的东西没必要非得用分片上传,反而更麻烦.

@YangSen-qn
Copy link
Collaborator

YangSen-qn commented Jul 15, 2021

@suconghou v7.9.7 之前的版本中,表单上传在特殊场景存在小问题,为了修复这个问题需要加载表单信息到内存,所以会提高内存峰值。所以如果您 SDK 升级到 v7.9.7,强烈建议使用分片上传。

@suconghou
Copy link
Author

@YangSen-qn

分片上传没有 类似 PutWithoutSizeWithoutKey 的API呢, 用来替换 formUploader.PutWithoutKey(ctx, &ret, upToken, body, dataLen, &extra)

body 没有可预知的准确大小,
key 也要根据hash, mime 生成的.

@YangSen-qn
Copy link
Collaborator

YangSen-qn commented Jul 20, 2021

@suconghou
formUploader 上传,如果不知道大小,size 传 -1 即可

@suconghou
Copy link
Author

@YangSen-qn
这个我知道,我就是这么用的, 现在你们说要改成resumeUploader,但resumeUploader没发现有 PutWithoutSizeWithoutKey 这种上传的API呀. 看清楚上下文问题.

@YangSen-qn
Copy link
Collaborator

YangSen-qn commented Jul 23, 2021

@suconghou
分片上传暂时没有既不设置 key 也不设置 size 的接口,后续会添加。

@ericzhao007
Copy link

我们正在构建一个文件上传中间服务,期望以流的形式传输,但看到 ioutil.ReadAll 之后很明显与需求不符,为此替换成文件会多一次磁盘io

@opvexe
Copy link

opvexe commented Jun 29, 2022

感觉你这个对象上传写的不好啊,为啥 formUploader.PutWithoutKey(ctx, &ret, upToken, body, dataLen, &extra),
好难用,不能直接用 storage.NewBucketManager吗?上传对象在创建一个 formUploader,能不能参考下华为的obs写法,我觉得这个写了就很简单。
image

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants