Ogranicz prędkość pobierania wget lub curl podczas pobierania

97

Czy można ograniczyć (ograniczyć) prędkość pobierania wgetlub curl?

Czy można zmienić wartość przepustnicy podczas pobierania?

Gautam
źródło
3
Nie, nie można zmienić prędkości podczas pobierania. Spójrz na menedżerów pobierania GUI, takich jak fatrat lub multiget
Ulrich Dangel
3
Możesz jednak zawiesić proces za pomocą SIGSTOPlub ctrl + z i wznowić go później za pomocą SIGCONTlub fg. To powinno zatrzymać proces pobierania.
Ulrich Dangel
Zastanawiam się, czy istnieje ogólny sposób na dławienie dowolnego uruchomionego programu, np. Poprzez ustawienie zmiennej środowiskowej.
Ehtesh Choudhury
@ ulrich-dangel --limit-rate = kwota
Chrips

Odpowiedzi:

131

Tak, obsługa wget i curl ogranicza szybkość pobierania. Obie opcje są bezpośrednio wymienione na stronie man.

kędzior

   --limit-rate <speed>
          Specify the maximum transfer rate you want curl to use. 
           This feature is useful  if you  have a limited pipe and 
           you'd like your transfer not to use your entire bandwidth.

          The given speed is measured in bytes/second, unless a suffix 
          is appended.  Appending  'k'  or 'K' will count the number
          as kilobytes, 'm' or M' makes it megabytes, while 'g' or 'G' 
          makes it gigabytes. Examples: 200K, 3m and 1G.

Na przykład: curl --limit-rate 423K

wget

   --limit-rate=amount
       Limit the download speed to amount bytes per second.  Amount may
       be expressed in bytes, kilobytes with the k suffix, or 
       megabytes with the m suffix.  For example, --limit-rate=20k will limit 
       the retrieval rate to 20KB/s.  This is useful when, for
       whatever reason, you don't want Wget to consume 
       the entire available bandwidth.

Na przykład: wget --limit-rate=423k

Ulrich Dangel
źródło
2
Czy można to zmienić dynamicznie podczas pobierania?
Gautam
2
@GautamK Nie, ponieważ ani wgetnie curlsą programami interaktywnymi.
Ulrich Dangel
12
@GautamK W przypadku jednego dużego pliku, jeśli serwer go zaakceptuje, możesz zabić wgetlub curlprzetworzyć i wznowić za pomocą wget -club curl -C. Jeśli naprawdę trzeba przekonfigurować uruchomiony proces, należy sączyć z demon - ale konfiguracja jest nieco skomplikowana. Ewentualnie zajrzyj do kształtowania ruchu - ponownie, jeśli konfiguracja jest skomplikowana.
Gilles
4

2 lata później wrzucę ten smakołyk, podczas gdy wgeti curlnie są interaktywne, przynajmniej wget(i być może, curlale nie wiem na pewno) ma -cprzełącznik (co oznacza kontynuację od miejsca, w którym wcześniej zakończyłem pobieranie). Więc jeśli musisz zmienić prędkość w trakcie pobierania i prawdopodobnie użyłeś -cprzełącznika z --limit-rate=xwtedy, możesz zatrzymać wgeti ponownie uruchomić go z inną prędkością i to się zmieni.

użytkownik82611
źródło
2

Możliwe jest ograniczenie prędkości ruchu za pomocą narzędzi tci netem, ale ograniczy to szybkość interfejsu sieciowego komputera. Zakładam, że korzystasz tylko wgetlub curlżadna inna aplikacja nie wymienia ruchu przez interfejs sieciowy.

tc używa Token Bucket Filter (TBF) do kontrolowania szybkości.

Jednym z przykładów TBF byłby następujący (zob. Http://www.lartc.org/manpages/tc-tbf.html ):

Aby dołączyć TBF o przedłużonej maksymalnej szybkości 0,5 Mb / s, szczytowej prędkości 1,0 Mb / s, buforze 5 kilobajtów, z obliczonym limitem wielkości kolejki przed wiadrem, tak że TBF powoduje co najwyżej 70 ms opóźnienia, przy zachowaniu idealnej wartości szczytowej , kwestia:

# tc qdisc add dev eth0 root tbf rate 0.5mbit \ burst 5kb latency 70ms peakrate 1mbit \ minburst 1540

Kolejny przykład użycia usc tc i netem byłby następujący (znaleziony w http://www.linuxfoundation.org/collaborate/workgroups/networking/netem ):

W dyscyplinie netem nie ma wbudowanej kontroli stawek, zamiast tego użyj jednej z innych dyscyplin, które kontrolują stawki. W tym przykładzie używamy Token Bucket Filter (TBF) w celu ograniczenia wydajności.

Aby dodać opóźnienie każdego pakietu przechodzącego / przechodzącego przez interfejs eth0

 # tc qdisc add dev eth0 root handle 1:0 netem delay 100ms

aby dodać szybkość transmisji danych w TBF, rozmiar bufora pakietów i maksymalny limit serii

 # tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000

Aby zobaczyć listę reguł przypisanych w tc dla interfejsu eth0

 # tc -s qdisc ls dev eth0

Dane wyjściowe powyższego polecenia byłyby takie jak poniżej

 qdisc netem 1: limit 1000 delay 100.0ms
  Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )
 qdisc tbf 10: rate 256Kbit burst 1599b lat 26.6ms
  Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )

Sprawdź opcje bufora i limitu, ponieważ może się okazać, że potrzebujesz większych wartości domyślnych (te są w bajtach)

Abdul
źródło