【问题标题】:Amazon S3 high CPU usage with 100 PutObject calls (.NET)具有 100 个 PutObject 调用 (.NET) 的 Amazon S3 高 CPU 使用率
【发布时间】:2012-11-03 00:39:12
【问题描述】:

我们使用 Amazon S3 存储多达 500K 的数据。 我们在 EC2 实例上安装了一个 .NET 4.0 Web 服务,它使用 500K 数据进行 PutObject 调用。

问题在于,当我们同时调用 100 多个此服务(使用唯一的 S3 密钥)时,分别对 S3,EC2 实例 CPU 达到 100%。我们对 Web 服务进行了一些分析,它表明 99% 的处理时间是由 AmazonS3Client.PutObject 方法占用的。

我们尝试将 S3 客户端配置为使用 HTTP(而不是默认的 HTTPS),并且还尝试了一些 S3 密钥生成方案,但没有任何帮助。这篇文章Amazon S3 PutObject is very slow 也没有帮助。

我们的 S3 密钥架构是:“111_[incrementing ID].txt”

如果我们使用较短的数据(例如小于 1K),则不会发生这种大量 CPU 使用。

您能否给我们一些指导以提高 CPU 性能或在哪里寻找?

这是该调用的源代码:

string fileName = "111_" + Id + ".txt";
using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(RegionEndpoint.XXXX))
        {
            try
            {
PutObjectRequest request = new PutObjectRequest();
request.WithContentBody(dataRequest.Base64Data)
                 .WithBucketName(bucketName)
                 .WithKey(fileName);

S3Response response = client.PutObject(request);
response.Dispose();
            }
            catch (AmazonS3Exception amazonS3Exception)
            {
              //Handle exceptiom...
            }
        }

谢谢!

【问题讨论】:

  • 您可能会发现this question 的答案很有帮助。
  • 我没有 .net 经验,但阅读这篇文章improve.dk/archive/2011/11/07/… 我有一种预感,base64 调用可能会导致 CPU 负载。您可以尝试使用不是即时生成的 500 kbyte 字符串吗?
  • 如果您使用 SDK,请查看源代码以了解如何处理分段上传。这几乎就像是块大小导致性能问题的情况。关于命名对象的另一个注意事项可能与此问题不完全相关但很有用:aws.typepad.com/aws/2012/03/…

标签: .net amazon-web-services amazon-s3 aws-sdk aws-sdk-net


【解决方案1】:

我会尝试使用 TransferUtility 更高级别的类,而不是低级别的 PutObject 调用。 http://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_S3_Transfer_TransferUtility.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2011-10-12
    相关资源
    最近更新 更多