告别龟速:实战对比axel、aria2与mwget,解锁Linux多线程下载新姿势
1. 为什么需要多线程下载工具在Linux系统中wget和curl这两个老牌下载工具几乎成了系统管理员的标配。我用了整整十年的wget直到有一天需要下载一个2GB的数据库备份文件时看着那始终徘徊在200KB/s的下载速度才意识到问题的严重性。单线程下载就像是用一根吸管喝珍珠奶茶无论你怎么用力流量上限就摆在那里。多线程下载的核心原理其实很简单把文件切成多个小块同时开多个连接分别下载这些片段最后在本地合并。这就像组织了一个下载小分队每个人负责搬运文件的不同部分。实际测试中同样的网络环境下多线程工具通常能达到单线程3-5倍的下载速度。特别是在跨国下载大文件时效果更加明显。我最近在阿里云新加坡服务器上下载一个国内镜像站的Docker镜像wget稳定在800KB/s左右而换成20线程的axel后直接飙到3.2MB/s。这种差距在传输数十GB的虚拟机镜像时意味着能节省数小时的等待时间。2. 三大神器横向评测2.1 axel轻量级多线程下载先锋安装axel最简单的方式是通过包管理器。在Ubuntu上只需要sudo apt install axel如果是CentOS系统需要先启用EPEL仓库sudo yum install epel-release sudo yum install axelaxel最实用的参数组合是axel -n 20 -a -o ~/downloads/ https://example.com/large_file.iso这里的-n 20表示启用20个连接-a显示炫酷的进度条-o指定保存路径。实际测试下载一个4.7GB的Ubuntu镜像wget用时32分18秒axel20线程仅用6分47秒但axel有两个明显缺点不支持BT下载遇到某些CDN节点时会出现重定向循环错误。这时候就需要更新到最新版本wget https://github.com/axel-download-accelerator/axel/releases/download/v2.17.11/axel-2.17.11.tar.gz tar xzf axel-2.17.11.tar.gz cd axel-2.17.11 ./configure make sudo make install2.2 aria2全能型下载引擎aria2堪称命令行界的迅雷支持HTTP/HTTPS、FTP、BT甚至磁力链接。安装方式# Ubuntu/Debian sudo apt install aria2 # CentOS/RHEL sudo yum install aria2我最常用的BT下载命令aria2c --seed-time0 --max-upload-limit1K --bt-tracker$(curl -s https://ngosang.github.io/trackerslist/trackers_all.txt | awk NF | sed :a;N;s/\n/,/g;ta) magnet:?xturn:btih:xxxxxx这个命令做了三件事--seed-time0下载完立即停止做种--max-upload-limit1K限制上传带宽自动获取最新的BT tracker列表提升下载速度实测用aria2下载BT资源时速度能轻松跑满百兆带宽。它的配置文件~/.aria2/aria2.conf也很强大可以设置# 最大同时下载数 max-concurrent-downloads5 # 单个文件连接数 split16 # 下载速度限制 max-overall-download-limit0 # 启用RPC接口 enable-rpctrue rpc-listen-alltrue配合WebUI如AriaNg就能在浏览器里管理下载任务体验堪比专业下载工具。2.3 mwgetwget的增强版mwget可以理解为wget的多线程魔改版安装需要编译wget http://jaist.dl.sourceforge.net/project/kmphpfm/mwget/0.1/mwget_0.1.0.orig.tar.bz2 tar -xjvf mwget_0.1.0.orig.tar.bz2 cd mwget_0.1.0.orig ./configure make sudo make install基本用法和wget类似只是多了线程控制mwget -n 8 https://example.com/large_file.zip不过mwget最后一次更新已经是2012年对HTTPS的支持不太完善。我在测试下载GitHub上的文件时经常遇到SSL证书错误。作为临时解决方案可以加上--no-check-certificate参数但安全性会降低。3. 性能实测对比在同一台阿里云ECS上配置1核2G带宽100Mbps测试下载CentOS 8的ISO镜像约7GB结果如下工具线程数平均速度完成时间CPU占用内存占用wget18.2MB/s14m32s3%12MBaxel2032.7MB/s3m41s28%45MBaria21635.1MB/s3m22s35%67MBmwget825.4MB/s4m36s22%38MB几个有趣的发现aria2在速度上略微领先但资源消耗也最大axel的进度条显示最直观适合交互式操作当线程数超过20后速度提升不再明显反而会增加服务器负担4. 不同场景下的选择建议4.1 常规HTTP/FTP下载对于简单的文件下载axel是最轻便的选择。比如下载Docker镜像axel -n 10 -o /tmp/alpine.iso https://dl-cdn.alpinelinux.org/alpine/v3.16/releases/x86_64/alpine-standard-3.16.0-x86_64.iso有个小技巧遇到速度慢的镜像站时可以用-S参数开启镜像搜索axel -S5 -n 15 http://example.com/slow_file.zip4.2 BT/磁力链接下载aria2是唯一选择推荐这样配置先创建~/.aria2/aria2.conf配置文件定期更新tracker列表tracker_urlhttps://ngosang.github.io/trackerslist/trackers_all.txt trackers$(curl -s $tracker_url | awk NF | paste -sd , -) sed -i sbt-tracker.*bt-tracker$trackers ~/.aria2/aria2.conf启动RPC服务aria2c --conf-path/path/to/aria2.conf -D4.3 需要断点续传的长期任务aria2的-c参数可以完美实现断点续传。我曾经用它在不稳定的网络环境下下载20GB的虚拟机镜像aria2c -c -x8 -s8 --file-allocationprealloc https://example.com/big_file.ova--file-allocationprealloc参数会预先分配磁盘空间避免下载中途空间不足。5. 常见问题解决方案问题1axel报错Too many redirects这是老版本axel的bug解决方法# 查看当前版本 axel --version # 如果低于2.17.10就升级 wget https://github.com/axel-download-accelerator/axel/releases/download/v2.17.11/axel-2.17.11.tar.gz tar xzf axel-2.17.11.tar.gz cd axel-2.17.11 ./configure make sudo make install问题2aria2 BT下载没速度首先确保防火墙放行了BT端口默认6881-6999然后更新tracker列表添加--bt-enable-lpdtrue参数启用本地节点发现尝试不同的种子文件问题3mwget SSL证书错误临时解决方案mwget --no-check-certificate https://example.com/file但更建议换用axel或aria2。6. 进阶技巧让下载更快更稳速度限制策略用-s参数避免占满带宽axel -s 5000000 -n 10 http://example.com/file # 限制5MB/s连接数调优根据文件大小设置线程数100MB4-8线程100MB-1GB10-15线程1GB15-20线程下载后自动校验aria2c --checksumsha-256xxxxxx http://example.com/file定时下载任务# 每天凌晨下载更新包 echo axel -n 10 http://example.com/daily_update.tar.gz | at 3:00am配合screen/tmuxscreen -S download axel -n 20 http://example.com/large_file # CtrlA D 断开需要时重新连接 screen -r download