web-dev-qa-db-fra.com

Limitez la vitesse de téléchargement de wget ou curl pendant le téléchargement

Est-il possible de limiter (limiter) la vitesse de téléchargement de wget ou curl?

Est-il possible de modifier la valeur de l'accélérateur pendant le téléchargement?

101
Gautam

Oui, les supports wget et curl limitent votre taux de téléchargement. Les deux options sont directement mentionnées dans la page de manuel.

curl

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

Par exemple: 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.

Par exemple: wget --limit-rate=423k

139
Ulrich Dangel

2 ans plus tard, je jetterai cette friandise, tandis que wget et curl ne sont pas interactifs, au moins wget (et éventuellement curl mais je ne sais pas pour sûr) a le -c switch (qui signifie continuer à partir du point où j'ai interrompu le téléchargement plus tôt). Donc, si vous devez modifier votre vitesse au milieu d'un téléchargement et que vous avez probablement utilisé le -c basculer avec le --limit-rate=x alors vous pourriez arrêter wget et le redémarrer avec une vitesse différente et cela changerait.

4
user82611

Il est possible de limiter le débit du trafic à l'aide des outils tc et netem mais cela limitera le débit de l'interface réseau de l'ordinateur. Je suppose que vous utilisez uniquement wget ou curl et qu'aucune autre application n'échange de trafic via l'interface réseau.

tc utilise Token Bucket Filter (TBF) pour contrôler le débit.

Un exemple de TBF serait le suivant (réf. http://www.lartc.org/manpages/tc-tbf.html ):

Pour attacher un TBF avec un taux maximum soutenu de 0,5 Mbits/s, un pic de 1,0 Mbits/s, un tampon de 5 Ko, avec une limite de taille de file d'attente pré-bucket calculée de sorte que le TBF provoque au plus 70 ms de latence, avec un comportement de pic parfait , problème:

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

Un autre exemple d'utilisation tc et netem serait le suivant (trouvé dans http://www.linuxfoundation.org/collaborate/workgroups/networking/netem ):

Il n'y a pas de contrôle de taux intégré à la discipline netem, utilisez plutôt l'une des autres disciplines qui font le contrôle de taux. Dans cet exemple, nous utilisons Token Bucket Filter (TBF) pour limiter la sortie.

Pour ajouter le retard de chaque paquet allant/venant à travers l'interface eth0

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

pour ajouter le débit de données en tbf, la taille du tampon de paquets et la limite de rafale maximale

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

Pour voir la liste des règles affectées en tc pour l'interface eth0

 # tc -s qdisc ls dev eth0

La sortie de la commande ci-dessus serait comme ci-dessous

 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 )

Vérifiez les options de tampon et de limite car vous pourriez trouver que vous avez besoin de valeurs par défaut plus importantes que celles-ci (elles sont en octets)

2
Abdul