2012-11-14 5 views
5

Utilizziamo Amazon S3 per archiviare fino a 500 KB di dati. Abbiamo un servizio Web .NET 4.0 installato sull'istanza EC2, che rende la chiamata PutObject con dati 500K.Utilizzo elevato della CPU Amazon S3 con 100 chiamate PutObject (.NET)

Il problema è che quando eseguiamo più di 100 chiamate simultanee (con tasti S3 univoci) a questo servizio, rispettivamente a S3, e la CPU di istanza EC2 sta raggiungendo il 100%. Abbiamo effettuato alcuni profiling sul servizio web e questo mostra che il 99% del tempo di elaborazione è preso dal metodo AmazonS3Client.PutObject.

Abbiamo provato a configurare il client S3 per utilizzare HTTP (anziché HTTPS predefinito), e abbiamo anche giocato un po 'con lo schema di generazione delle chiavi S3, ma nulla ha aiutato. Questo articolo Amazon S3 PutObject is very slow non ha aiutato neanche.

nostro S3 schema fondamentale è: "111_ [ID incrementare] .txt"

Questo ampio utilizzo della CPU non accade se usiamo un data più breve - come meno di 1K.

Puoi darci qualche consiglio su cosa si potrebbe fare per migliorare le prestazioni della CPU o dove cercare?

Ed ecco il codice sorgente di quella chiamata:

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

Grazie!

+0

È possibile trovare le risposte a [questa domanda] (https://forums.aws.amazon.com/thread.jspa?messageID=400164&tstart=0) utili. –

+0

Non ho esperienza .net ma sto leggendo questo articolo http://improve.dk/archive/2011/11/07/pushing-the-limits-of-amazon-s3-upload-performance.aspx Ho la sensazione che il chiamata base64 potrebbe causare il carico della CPU. Puoi provare con una stringa da 500 kbyte che non viene generata al volo? – tix3

+0

Se si sta utilizzando l'SDK, dare un'occhiata all'origine per capire come viene gestito il caricamento multipart. Sembra quasi un caso di dimensioni del blocco che causano problemi con le prestazioni. Un'altra nota relativa alla denominazione di oggetti che potrebbero non essere interamente correlati a questa domanda ma utili da seguire: http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle- cessione temporanea event.html – Keshi

risposta