2013-04-03 9 views
5

Próbuję znaleźć poprawne strojenie dla nginx na serwerze AWS, który jest całkowicie wspierany przez EBS. Podstawową kwestią jest to, że pobierając plik statyczny o wielkości 100 MB, widzę stałe szybkości pobierania ~ 60K/s. Jeśli używam scp do kopiowania tego samego pliku z serwera AWS, widzę szybkości ~ 1MB/s. (Więc nie jestem pewien, czy EBS wchodzi tutaj w grę).duży plik statyczny nginx wyświetlający powolny na serwerze AWS z obsługą EBS

Początkowo uruchamiałem nginx z zasadniczo gotową konfiguracją (dla CentOS 6.x). Ale próbując przyspieszyć, grałem z różnymi parametrami strojenia, bez skutku - prędkość pozostała w zasadzie taka sama.

Oto odnośny fragment z mojego config jak to stoi w tej chwili:

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

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

Początkowo te ustawienia dostrojenia były:

sendfile  on; 
tcp_nopush  on; 
tcp_nodelay on; 

Uwaga, ja nie staram się zoptymalizować duży ruch. Najprawdopodobniej tylko jeden klient zostanie pobrany w danym momencie. Serwer AWS jest instancją "mikro" z 617 MB pamięci. Niezależnie od tego, że SCP może pobierać przy ~ 1MB/s, wierzę, że HTTP powinien być w stanie dopasować lub pokonać tę przepustowość.

Każda pomoc jest doceniana.

[Aktualizacja] Dodatkowe informacje. Uruchamiając komendę 'top', podczas gdy pobieranie działa, otrzymuję:

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 

i 'iostat' pokazuje:

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

Czy znalazłeś [to podobne pytanie] (http://stackoverflow.com/questions/7395876/nginx-serving-static-large-file)? Z pewnością wygląda podobnie z CPU na 100%. – shamp00

+1

Zrobiłem. Ale mój procesor jest całkowicie bezczynny. Ustawiłem teraz "sendfile off;" "aio on;" "directio 256k;" a moja przepustowość wynosi średnio ~ 130K/s. Lepsze, ale daleko od 1 MB/s. – brettw

+0

Najpierw wyklucz niewidoczne stwory. Jeśli pobierasz na tym samym komputerze, najpierw przez localhost, a następnie za pośrednictwem jego oficjalnej nazwy hosta, w jaki więc sposób są to prędkości? – Melvyn

Odpowiedz

2

Domyślnie SCP znacznie szybciej niż połączenie HTTP. Mam dla ciebie propozycję. Jeśli wyświetlasz plik statyczny, wolę używać S3 z Cloud front. Co sprawia, że ​​jest to szybsze. Bardzo trudno jest osiągnąć lepszą wydajność, ale istnieje transfer plików.

+0

Nie jestem pewien, gdzie opierasz założenie, że scp będzie szybszy niż http. W rzeczywistości domyślnie będzie wolniejszy, ponieważ rzeczy muszą być szyfrowane. – Melvyn

0

Biorąc pod uwagę, że wszystko działa dobrze na tej samej maszynie, uzyskujesz dławienie. Najpierw sprawdź zasady użytkowania za pomocą AWS, być może w drobnym drukiem. Możesz też wypróbować innego dostawcę usług internetowych. Jeśli wszystkie dają 60kB/s, wiesz, że to AWS.

3

Czy rozważałeś włączenie włączania pliku sendfile? Sendfile pozwala nginxowi używać jądra bezpośrednio do wysyłania statycznych plików, więc powinno być szybsze niż jakakolwiek inna opcja.