2012-11-14 6 views
5

Wir verwenden Amazon S3 zum Speichern von bis zu 500.000 Daten. Wir haben auf EC2-Instanz installiert .NET 4.0 Web-Service, der den PutObject Anruf mit 500K Daten macht.Amazon S3 hohe CPU-Auslastung mit 100 PutObject-Aufrufen (.NET)

Das Problem ist, dass, wenn wir mehr als 100 gleichzeitige Anrufe (mit eindeutigen S3-Tasten) zu diesem Dienst bzw. S3, und die EC2-Instanz CPU 100% trifft. Wir haben eine Profilerstellung für den Webservice durchgeführt und festgestellt, dass die AmazonS3Client.PutObject-Methode 99% der Verarbeitungszeit beansprucht.

Wir haben versucht, den S3-Client für die Verwendung von HTTP (anstelle von Standard-HTTPS) zu konfigurieren, und spielten auch ein wenig mit dem S3-Schlüsselgenerierungsschema, aber nichts half. Dieser Artikel Amazon S3 PutObject is very slow hat auch nicht geholfen.

Unser S3 Schlüssel Schema lautet: "111_ [Inkrementieren ID] .txt"

Diese umfangreiche CPU-Auslastung nicht passiert, wenn wir eine kürzere Daten verwenden - wie weniger als 1K.

Können Sie uns eine Anleitung geben, was getan werden könnte, um die CPU-Leistung zu verbessern oder wo Sie suchen?

Und hier ist der Quellcode für diesen Anruf:

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

Dank!

+0

Sie können die Antworten auf [diese Frage] (https://forums.aws.amazon.com/thread.jspa?messageID=400164&tstart=0) hilfreich finden. –

+0

Ich habe keine .net Erfahrung, aber diesen Artikel lesen http://improve.dk/archive/2011/11/07/pushing-the-limits-of-amazon-s3-upload-performance.aspx Ich habe eine Ahnung, dass die Base64-Aufruf verursacht möglicherweise die CPU-Auslastung. Können Sie es mit einer 500-kB-Zeichenfolge versuchen, die nicht spontan generiert wird? – tix3

+0

Wenn Sie das SDK verwenden einen Blick auf die Quelle, um herauszufinden, wie der Multipart-Upload gehandhabt wird. Es scheint fast so, als würden die Chunk-Größen Probleme mit der Performance verursachen. Auch eine weitere Notiz über die Benennung von Objekten, die möglicherweise nicht vollständig mit dieser Frage verbunden sind, aber nützlich zu folgen: http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-seat- miet-event.html – Keshi

Antwort