在下载时限制wget或curl的下载速度


97

是否可以限制(限制)wget或的下载速度curl

下载时是否可以更改油门值?


3
不可以,下载时无法更改速度。看看像fatrat或multiget之类的gui下载管理器
Ulrich Dangel 2012年

3
但是,您可以通过SIGSTOP或ctrl + z 暂停该过程,以后再使用SIGCONT或fg 恢复该过程。这应该暂停下载过程。
Ulrich Dangel

我想知道是否存在一种通用方法来限制任何正在运行的程序,即通过设置环境变量。
Ehtesh Choudhury 2014年

@ ulrich-dangel --limit-rate = amount
Chrips

Answers:


131

是的,wget和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.

例如: curl --limit-rate 423K

get

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

例如: wget --limit-rate=423k


2
下载进行期间是否可以动态更改?
乔塔姆,2012年

2
@GautamK不,交互程序wget也不curl是。
Ulrich Dangel,2012年

12
@GautamK对于一个大文件,如果服务器接受它,则可以终止wgetcurl进程,然后使用wget -c或恢复curl -C。如果您确实需要重新配置正在运行的进程,请使用带有进程的细流(trickle) —但是设置有些复杂。另外,也可以研究流量整形-同样,如果设置复杂的话。
吉尔斯

4

两年后我会抛出这么一个小节目中,而wgetcurl没有互动,至少wget(以及可能的curl,但我不肯定知道)具有-c开关(代表从我离开的下载较早的地方继续)。因此,如果您需要在下载过程中更改速度,并且可能将-c开关与一起使用,--limit-rate=x则可以停止wget并以不同的速度重新启动它,并且它会发生变化。


2

可以使用tcnetem工具来限制流量速率,但这将限制计算机网络接口的速率。我假设您仅使用,wget或者curl没有其他应用程序通过网络接口交换流量。

tc 使用令牌桶过滤器(TBF)来控制速率。

TBF的一个示例如下(参考http://www.lartc.org/manpages/tc-tbf.html):

要连接最大持续速率为0.5mbit / s,最大峰值速率为1.0mbit / s,5kb的TBF,并计算出预桶队列大小限制,因此,TBF最多导致70ms的延迟,并具有完美的峰值速率行为, 问题:

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

usign tc和netem的另一个示例如下(在http://www.linuxfoundation.org/collaborate/workgroups/networking/netem找到):

netem学科没有内置的速率控制,而是使用其他进行速率控制的学科之一。在此示例中,我们使用令牌桶过滤器(TBF)来限制输出。

添加通过接口eth0进入/进入每个数据包的延迟

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

添加以tbf为单位的数据速率,数据包缓冲区大小和最大突发限制

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

查看在tc中为接口eth0分配的规则列表

 # tc -s qdisc ls dev eth0

上面命令的输出如下

 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 )

检查缓冲区和限制选项,因为您可能会发现需要更大的默认值(以字节为单位)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.