Amazon S3高CPU使用率和100个PutObject调用(.NET)

时间:2012-11-14 13:54:20

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

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

问题在于,当我们为此服务分别向S3发出100多个同时呼叫(使用唯一的S3密钥)时,EC2实例CPU达到100%。我们对Web服务进行了一些分析,结果显示,99%的处理时间是由AmazonS3Client.PutObject方法完成的。

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

我们的S3密钥架构是:“111_ [递增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...
            }
        }

谢谢!

1 个答案:

答案 0 :(得分:0)

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