6

最大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...
            }
        }

ありがとう!

4

1 に答える 1

0

低レベルの PutObject 呼び出しではなく、TransferUtility の高レベル クラスを試してみます。http://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_S3_Transfer_TransferUtility.htm

于 2014-03-19T16:52:09.603 に答える