【发布时间】:2016-05-26 19:57:45
【问题描述】:
我在 golang 上使用 AWS SDK 发送大型备份文件(2GB~10GB)。
进程启动时会消耗大量内存。我知道这是因为代码将文件读取到缓冲区,但我真的是 Go 新手,我不知道如何更改。
这是我用来读取文件并发送到 AWS S3 Uploader 的代码:
file, err := os.Open(file_to_upload)
file_name := getFileName(file_to_upload)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer file.Close()
fileInfo, _ := file.Stat()
var size int64 = fileInfo.Size()
buffer := make([]byte, size)
file.Read(buffer)
fileBytes := bytes.NewReader(buffer)
fileType := http.DetectContentType(buffer)
upparams := &s3manager.UploadInput{
Bucket: &bucket,
Key: &file_name,
Body: fileBytes,
ACL: aws.String("private"),
ContentType: aws.String(fileType),
Metadata: map[string]*string{
"Key": aws.String("MetadataValue"), //required
},
}
result, err := uploader.Upload(upparams, func(u *s3manager.Uploader){
if partsize != 0{
u.PartSize = int64(partsize) * 1024 * 1024
}
u.LeavePartsOnError = false
u.Concurrency = parallel
})
```
到目前为止我测试过的内容。
修改:将 u.Concurrency 从 5 更改为 3: 结果:CPU:从 26% 减少到 21% 内存:使用相同
修改:将 u.Concurrency 从 5 更改为 2: 结果:CPU:从 26% 减少到 20% 内存:使用相同
修改:将 u.Concurrency 从 5 更改为 3,将 u.Partsize 更改为 100MB: 结果:CPU:从 26% 减少到 16% 内存:使用相同
这里的问题不是时间而是内存消耗。
我想调整它以尽可能减少资源。我该如何处理?
【问题讨论】:
标签: amazon-web-services memory go amazon-s3