下载性能
在 设置 → 下载 → 性能 中选择档位。连接数表示上限,实际使用的连接可能更少,取决于文件大小和服务器支持情况。
下载接近完成时,速度有时会明显下降。这通常与剩下的数据已经不够分给多个连接有关。只要已下载大小仍在增加,就可以先让任务继续完成。下面以普通文件下载为例,解释这个过程。
性能档位
| 档位 | 单文件最大连接数 | 单服务器上限 | 最小分段 | 磁盘缓存 |
|---|---|---|---|---|
| 自动 | 16 | 64 | 4 MiB | 32 MiB |
| 均衡 | 16 | 16 | 10 MiB | 32 MiB |
| 高速 | 32 | 32 | 4 MiB | 64 MiB |
| 极限 | 64 | 64 | 1 MiB | 64 MiB |
| 自定义 | 自行设置 | 自行设置 | 自行设置 | 自行设置 |
自动档位的摘要显示默认值。Motrix 可以根据下载磁盘和文件大小,为每个任务调整连接数和分段大小。磁盘缓存由下载引擎共享,可在引擎启动时自动调整。摘要不代表某个任务实时使用的连接数。
其他预设档位使用表中数值。选择自定义可手动修改。添加任务时单独设置的连接数,可以覆盖该任务使用的档位连接数。
摘要中的数值
- 最大连接数:一个文件从所有来源并行下载时的连接总数上限。
- 单服务器上限:一个文件对同一服务器的连接数上限。两个连接上限同时生效。
- 最小分段:控制下载区间能否继续拆分,不代表每段固定为这个大小。
- 磁盘缓存:下载数据写入磁盘前使用的内存缓冲,由所有下载任务共享。
这些连接和分段设置适用于普通 HTTP/HTTPS 和 FTP 下载。BitTorrent 使用种子定义的分片和节点设置,见 BT 与磁力链接。
多个连接如何一起下载
常说的“多线程下载”,在这里可以理解为:用多个网络连接,同时下载一个文件的不同部分。
以 HTTP/HTTPS 下载为例,服务器支持分段请求(Range)时,一个连接可以下载文件开头,另一个连接下载中间,其他连接下载后面的部分。收到的数据会写入文件的对应位置。
任务显示的下载速度,是这些连接接收数据的总速度。例如,4 个连接各以 2 MiB/s 下载,合计就是 8 MiB/s。这只是方便理解的例子:实际连接的速度各不相同,也会随网络和服务器状态变化。
如何自动分段
Motrix 通过 aria2 自动拆分下载区间。小于最小分段大小两倍的区间不会继续拆分。设为 1 MiB 时,这个阈值就是 2 MiB。更大的区间能否拆分,还取决于连接上限和服务器是否支持分段下载。
以 500 MiB 的 HTTP/HTTPS 文件为例,设置为最大连接数 64、单服务器上限 64、最小分段 1 MiB:
- 服务器支持 Range 请求时,最多可以使用 64 个连接并行下载。
- 如果单服务器上限改为 16,从单一服务器下载时最多使用 16 个连接。
- 服务器不支持分段下载时,通常只使用 1 个连接。
aria2 会在连接上限内动态分配下载区间。因此,上面的设置最多允许 64 个连接,1 MiB 只参与拆分判断,文件不会被固定切成 500 个独立的小下载任务。
1 MiB = 1,048,576 bytes。即使其他位置的文件大小使用十进制单位,这些设置仍使用二进制单位。
为什么快下完时会降速
当前引擎采用上面的分段方式,因此在收尾时可能出现这样的过程:
- 下载中途,有足够的数据分给多个连接。 各连接同时工作,总速度较高。
- 部分区间先下完,能继续分配的工作变少。 空闲连接如果能领到新的区间,就继续下载;如果剩余区间太小、无法再拆分,正在传输数据的连接就会减少。
- 最后只剩一小部分,由少数连接完成。 总速度也就取决于这些连接。如果其中一个连接较慢,最后一点数据会显得格外耗时。
连接减少,总速度可能降低
每列方块代表 1 个连接,方块下落表示数据传入。假设每个连接都是 2 MiB/s。
下载中途4 个连接
部分区间完成2 个连接
最后收尾1 个连接
原理示意,非实测数据。剩余连接足够快时,也可能保持满速。
这些阶段没有固定的进度百分比。实际连接数和降速幅度取决于文件、服务器和网络,不会固定按图中的顺序变化。
空闲连接为什么不能都来帮忙
一个连接已经接收了一部分数据后,其他连接要分担,就需要在剩余区间中找到合适的位置,另发请求。当前引擎会受最小分段大小和已分配区间的限制,无法一直把剩余数据细分下去。
例如,最小分段设为 1 MiB 时,不足 2 MiB 的区间不会继续拆分。判断针对的是可以拆分的区间;即使整个文件还剩不少数据,分散在不同位置的小区间也未必能拆给更多连接。
aria2 在满足条件时也会尝试换用更快的请求,但这并不保证最后一段始终跑满带宽。上述收尾过程可以从引擎的区间分配和请求调度规则理解。
Note
这里的“最后一段”指最后没下载完的数据,它也可能在文件中间。降速并没有固定的百分比起点,也不能仅凭接近 100% 就判断任务卡住了。
收尾变慢时怎么办
| 看到的情况 | 可以怎么做 |
|---|---|
| 速度变低,但已下载大小还在增加 | 先继续等待。下载速度是当前每秒收到的数据量;已下载大小更适合用来判断任务是否仍在前进。 |
| 已设置 32 或 64 个连接,最后仍很慢 | 连接数只是上限。剩余数据无法再拆分时,继续提高上限通常帮不上忙。 |
| 想尝试减轻收尾降速 | 可在自定义中尝试更小的最小分段,让更多区间有机会拆分。代价是可能增加请求和连接开销,也无法保证全程满速。通常先用自动档位即可。 |
| 长时间没有新增数据,或反复报错 | 按疑难排解检查任务错误、网络和磁盘状态。必要时尝试暂停后继续;服务器支持断点续传时可接着下载,但重连不保证更快。 |
如果任务已进入校验、移动文件等阶段,需要等待的是本地文件处理;增加下载连接数对这些步骤没有帮助。短暂收尾降速很常见,长时间停滞则需要结合任务状态排查。
如何选择档位
可以先使用自动。如果服务器拒绝连接或下载不稳定,尝试均衡,或在自定义中降低连接上限。连接越多不一定越快,速度仍受服务器、网络带宽和磁盘影响。需要给其他应用留出带宽时,使用限速。