wget
或curl
的下载速度?是否可以在下载时更改节流阀值?
#1 楼
是的,wget和curl都支持限制下载速度。手册页中直接提到了这两个选项。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
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.
例如:
wget --limit-rate=423k
评论
下载进行期间是否可以动态更改?
–乔塔姆
2012年5月23日14:34
@GautamK不,因为wget和curl都不是交互式程序。
–乌尔里希·丹格尔(Ulrich Dangel)
2012年5月23日15:28
@GautamK对于一个大文件,如果服务器接受它,则可以终止wget或curl过程,并使用wget -c或curl -C恢复。如果您确实需要重新配置正在运行的进程,请使用带有守护程序的细流(trickle)-但是设置有些复杂。另外,也可以研究流量整形-同样,如果设置复杂的话。
–吉尔斯'所以-不再是邪恶的'
2012年5月23日23:08
#2 楼
2年后,我将把这个花絮扔进去,而wget
和curl
不是交互式的,至少wget
(可能还有curl
,但我不确定)有-c
开关(代表从我先前停止下载的地方继续) 。因此,如果您需要在下载过程中更改速度,并且大概将-c
开关与--limit-rate=x
一起使用,则可以停止wget
并以不同的速度重新启动它。#3 楼
可以使用tc
和netem
工具限制流量速率,但这将限制计算机网络接口的速率。我假设您仅使用wget
或curl
,并且没有其他应用程序通过网络接口交换流量。 tc
使用令牌桶过滤器(TBF)来控制速率。TBF的一个示例如下(参考http://www.lartc.org/ manpages / tc-tbf.html):
以最大持续速率0.5mbit / s,峰值速率1.0mbit / s,5 KB缓冲区和预桶队列连接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 )
检查缓冲区和极限,因为您可能会发现需要更大的默认值(以字节为单位)
#4 楼
对于wget,一次下载多个页面时,我发现--wait
选项更容易理解。它使wget在两次请求之间等待一定的秒数,这与robots.txt的Crawl-delay
指令更加一致。wget
-w seconds
--wait=seconds
Wait the specified number of seconds between the retrievals. Use of this
option is recommended, as it lightens the server load by making the
requests less frequent. Instead of in seconds, the time can be specified
in minutes using the "m" suffix, in hours using "h" suffix, or in days
using "d" suffix.
Specifying a large value for this option is useful if the network or the
destination host is down, so that Wget can wait long enough to reasonably
expect the network error to be fixed before the retry. The waiting
interval specified by this function is influenced by "--random-wait", which
see.
评论
这是比最高答案更好的答案。
–卢克·哈奇森(Luke Hutchison)
20年6月13日在9:19
评论
不可以,下载时无法更改速度。看看gui下载管理器,例如fatrat或multiget但是,您可以通过SIGSTOP或ctrl + z暂停该过程,并在以后使用SIGCONT或fg恢复该过程。这将暂停下载过程。
我想知道是否有一种通用的方法来限制任何正在运行的程序,即通过设置环境变量来实现。
@ ulrich-dangel --limit-rate =金额