amazon-web-services - 上传文件到 AWS S3 占用大量 CPU

标签 amazon-web-services amazon-s3

我目前正在开发一个服务器应用程序 (JEE),在将文件上传到 AWS S3 时遇到了一些问题。我正在使用 Java SDK (S3client.putObject) 上传这些文件。当服务器启动时,一切都按预期发生。文件在服务器(EC2 实例)中生成并在几秒钟内上传到 S3。但是过了几天,性能下降了很多。通常需要 5 或 6 秒才能上传的文件现在需要 10 到 30 分钟(是的,分钟)。我分析了该应用程序,这里的罪魁祸首是使用 AWS Java SDK 进行上传的部分。奇怪的是,CPU 利用率接近 100% 并保持了几分钟。由于这基本上是一个 IO 操作,我不明白为什么它可能需要这么多 CPU 周期才能运行。 有没有人经历过这种行为? 关于在哪里查看的任何提示?

PS:文件大小从 1 到 50 MB。

非常感谢!

更新: 创建文件并将它们上传到 S3 的 EC2 实例是 m1.large。 我使用的是 1.6.4 AWS SDK 版本。

最佳答案

我在适用于 .NET 的 AWS SDK 中遇到了同样的问题。将 50GB 的文件上传到 S3 会占用 100% 的 CPU 使用率。

我分析了该应用。

事实证明,那是因为所有 AWS API 请求都必须“签名”,并且一个文件(尤其是大文件)是通过多个请求和 block 发送的,有时是数千个,其中一些是同时发送的。然后通过 SHA256 对每个请求进行哈希处理,并使用 IAM 凭证进行签名。

限制并发线程的数量,禁用 httpS(使用 http),限制 block 的数量,增加 block 的大小等等。通过这样做你可以减轻负载,但它仍然会使用大约 20-30%快速连接:(((即使您从同一区域的 EC2 发送到 S3,非常快速的连接)

关于amazon-web-services - 上传文件到 AWS S3 占用大量 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20615925/

相关文章:

amazon-web-services - AWS CloudWatch 规则以 AWS 批处理作为目标返回 FailedInvocation

php - 亚马逊 API 从产品中获取所有图像

javascript - Nextjs 静态文件 CORS 问题 - 导致链接在版本 10.1.4 上中断

javascript - 无法在 WebGL 中渲染来自 S3 存储桶的图像

java - NoClassDefFoundError : javax. xml.bind.DatatypeConverter

amazon-web-services - 在AWS S3中部署react-redux应用程序

objective-c - Swift/Objective S3 文件上传

amazon-s3 - 使用 GET、PUT 方法在 Amazon S3 云中获取和存储对象时,数据大小有哪些限制?

amazon-web-services - 使用 Elastic Beanstalk 应用程序启用 HTTPS 和 HTTP

amazon-web-services - 连接到 S3 存储桶时如何保护 AWS 中的凭证