2012-11-14 61 views
5

我們使用Amazon S3存儲多達500K的數據。 我們在EC2實例上安裝了.NET 4.0 Web服務,該服務使PutObject調用500K數據。亞馬遜S3使用100個PutObject調用的高CPU佔用率(.NET)

問題是,當我們向S3分別發送超過100個同時呼叫(使用唯一的S3密鑰)到此服務,並且EC2實例CPU達到100%時。我們對Web服務進行了一些分析,結果顯示99%的處理時間是由AmazonS3Client.PutObject方法執行的。

我們已經嘗試配置S3客戶端使用HTTP(而不是默認的HTTPS),並且還使用了S3密鑰生成方案,但沒有任何幫助。這篇文章Amazon S3 PutObject is very slow也沒有幫助。

我們的S3鍵模式是:「111_ [遞增ID] .TXT」

如果我們用更短的數據這種廣泛的CPU使用率不會發生 - 就像不到1K。

您可以給我們一些指導可以做些什麼來提高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

您可能會發現[此問題]的答案(https://forums.aws.amazon.com/thread.jspa?messageID=400164&tstart=0)有幫助。 –

+0

我沒有.net的經驗,但閱讀這篇文章http://improve.dk/archive/2011/11/07/pushing-the-limits-of-amazon-s3-upload-performance.aspx我有一個預感, base64調用可能會導致CPU負載。你可以嘗試用一個500千字節的字符串,而不是在飛行中生成? – tix3

+0

如果您正在使用SDK,請查看源代碼以瞭解如何處理分段上傳。它幾乎看起來像塊大小的情況下導致性能問題。 關於命名對象的另一個注意事項可能並不完全與這個問題有關,但有助於遵循:http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-招聘-event.html – Keshi

回答