我们正在使用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...
}
}
谢谢!
答案 0 :(得分:0)
我会尝试使用TransferUtility更高级别的类,而不是低级别的PutObject调用。 http://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_S3_Transfer_TransferUtility.htm