最大500Kのデータを保存するためにAmazonS3を使用しています。EC2インスタンスに.NET4.0Webサービスがインストールされており、500KデータでPutObject呼び出しが行われます。
問題は、このサービスに対して(一意のS3キーを使用して)100を超える同時呼び出しをそれぞれS3に対して行うと、EC2インスタンスのCPUが100%に達することです。Webサービスでプロファイリングを行ったところ、処理時間の99%がAmazonS3Client.PutObjectメソッドによって費やされていることがわかりました。
(デフォルトのHTTPSの代わりに)HTTPを使用するようにS3クライアントを構成しようとしました。また、S3キー生成スキームで少し遊んでみましたが、何も役に立ちませんでした。この記事 AmazonS3PutObjectは非常に遅いので、どちらも役に立ちませんでした。
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...
}
}
ありがとう!