2013-04-03 15 views
5

Sto cercando di capire l'ottimizzazione corretta per nginx su un server AWS che è interamente supportato da EBS. Il problema di base è che quando si scarica un file statico di ~ 100 MB, vedo tassi di download costanti di ~ 60 K/s. Se utilizzo scp per copiare lo stesso file dal server AWS, visualizzo frequenze di ~ 1 MB/s. (Quindi, non sono sicuro che anche EBS entri in gioco qui).nginx file statico di grandi dimensioni che funziona lentamente su server AWS con supporto EBS

Inizialmente, eseguivo nginx praticamente con la configurazione predefinita (per CentOS 6.x). Ma nel tentativo di accelerare le cose, ho giocato con vari parametri di ottimizzazione senza alcun risultato - la velocità è rimasta sostanzialmente la stessa.

Ecco il frammento rilevante dal mio config così com'è in questo momento:

location /download { 
    root /var/www/yada/update; 
    disable_symlinks off; 
    autoindex on; 

    # Transfer tuning follows 
    aio  on; 
    directio 4m; 
    output_buffers 1 128k; 
} 

Inizialmente, queste impostazioni di sintonizzazione sono stati:

sendfile  on; 
tcp_nopush  on; 
tcp_nodelay on; 

Nota, non sto cercando di ottimizzare per una grande quantità di traffico. È probabile che solo un singolo client si scarichi in qualsiasi momento. Il server AWS è un'istanza "micro" con 617 MB di memoria. Indipendentemente da ciò, il fatto che scp possa scaricare a ~ 1 MB/s mi porta a credere che HTTP dovrebbe essere in grado di eguagliare o battere quel throughput.

Qualsiasi aiuto è apprezzato.

[Aggiornamento] Ulteriori informazioni. L'esecuzione di un comando di 'top', mentre un download è in esecuzione, ottengo:

top - 07:37:33 up 11 days, 1:56, 1 user, load average: 0.00, 0.01, 0.05 
Tasks: 63 total, 1 running, 62 sleeping, 0 stopped, 0 zombie 
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 

e 'iostat' spettacoli:

Linux 3.2.38-5.48.amzn1.x86_64  04/03/2013 _x86_64_ (1 CPU) 

avg-cpu: %user %nice %system %iowait %steal %idle 
      0.02 0.00 0.03 0.03 0.02 99.89 

Device:   tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn 
xvdap1   0.23   2.66   8.59 2544324 8224920 
+0

Hai trovato [questa domanda simile] (http://stackoverflow.com/questions/7395876/nginx-serving-static-large-file)? Sicuramente è simile alla CPU al 100%. – shamp00

+1

L'ho fatto. Ma la mia CPU è completamente inattiva. Ora ho impostato 'sendfile off;' 'aio su;' 'directio 256k;' e il mio throughput è fino a ~ 130K/s in media. Meglio, ma molto lontano da 1 MB/s. – brettw

+0

Prima escludi i servitori invisibili. Se scarichi sulla stessa macchina, prima tramite localhost poi tramite il suo nome host ufficiale, come vanno le velocità? – Melvyn

risposta

2

da SCP impostazione predefinita sarà molto più veloce allora la vostra connessione HTTP. Ho un suggerimento per te. Se stai servendo un file statico, preferisco usare S3 con Cloud front. Che lo rende più veloce È molto difficile ottenere prestazioni migliori in caso di trasferimento di file.

+0

Non sono sicuro di dove si basa l'ipotesi che lo scp sarà più veloce di http. In effetti sarà più lento di default poiché le cose devono essere crittografate. – Melvyn

0

Dato che le cose funzionano bene sulla stessa macchina, si viene strozzati. Innanzitutto controlla la tua politica di utilizzo con AWS, forse è nella stampa fine. In alternativa, prova diversi ISP. Se ti danno tutti 60kB/s, sai che è AWS.

3

Hai mai pensato di attivare sendfile? Sendfile consente a nginx di utilizzare direttamente il kernel per inviare file statici, quindi dovrebbe essere più veloce di qualsiasi altra opzione.

Problemi correlati