将文件上传到AWS S3需要大量CPU

Cle*_*idt 3 amazon-s3 amazon-web-services

我目前正在开发服务器应用程序 (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 版本。

Ale*_*lex 5

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

我介绍了该应用程序。

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

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