Ber*_*ale 4 memory amazon-s3 go amazon-web-services

我在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%内存:相同用法

时间不是问题,而是内存消耗.

我想以尽可能少的资源来调整它.我该如何处理?