#はじめに
Webサーバなどからファイルをダウンロードするためのコマンドラインツールとしては、curlとwgetがメジャーだと思います。どちらも多機能で簡単に使える便利なツールですね。
今回ご紹介するaria2は、curlやwgetと同じくファイルをダウンロードするためのツールですが、やや方向性が異なります。
機能面ではcurlやwgetに劣るものの、複数コネクションによる並列ダウンロードにより高速なダウンロードが可能です。
類似ツールとしてはaxelが挙げられますが、2009年頃開発が終了してしまったようです。
(GitHubにコピーがありますが、メンテナンスされていないように見受けられます)
単純に大きなファイル一本を短時間でダウンロードしたい場合には、今回ご紹介するaria2は結構使えると思います。
#aria2公式サイト
こちら
#aria2の特徴
- 複数コネクションによる並列ダウンロード
- 複数サーバから同一ファイルを分散並列ダウンロード
- torrent対応
#インストール
##Mac OS X
brew一発でインストールは完了します。
$ brew install aria2
##Ubuntu
apt-get一発でインストールは完了します。
$ sudo apt-get install aria2
##RHEL7/CentOS7
EPELリポジトリが必要です。
$ sudo yum install epel-release
$ sudo yum install aria2
#使い方とちょっとだけベンチマーク
##環境
インフラ AWS EC2 m4.xlarge (東京リージョン)
OS CentOS7.2 64bit
WAN側回線速度 推定600Mbps
##ベンチマークに使用したファイル
相手側サーバへの負荷を抑えるため小さめの.isoファイルを使用しました。
CentOS-7-x86_64-Minimal-1611.iso
(CentOS7のMinimalインストール用.isoファイルを使っています)
##接続先(ダウンロード元)サイト
勝手に試験に協力して頂きました。感謝致します。
Site1
WIDE Internet Nara Network Operation Center
Site2
JAIST 北陸先端科学技術大学院大学
またtorrentの試験については世界中の皆さんにご協力頂きました。
##転送時間測定方法
各ツールのコンソール出力には転送時間や平均転送レートが表示されますが、curlの転送時間表示には転送後にテンポラリファイルから実ファイルへのコピー処理が含まれておらず、実際より高速に見える傾向があります。
そこでtimeコマンドを使用し実処理時間を測定しました。
##curlでダウンロード
$ time curl -O ftp://ftp.nara.wide.ad.jp/pub/Linux/centos/7.3.1611/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 680M 100 680M 0 0 2926k 0 0:03:57 0:03:57 --:--:-- 2532k
real 3m57.956s
user 0m0.376s
sys 0m3.832s
3分57秒でダウンロードが完了しました。
##wgetでダウンロード
$ time wget ftp://ftp.nara.wide.ad.jp/pub/Linux/centos/7.3.1611/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso
#(中略)
100%[=========================================================================================================================>] 713,031,680 2.95MB/s in 3m 51s
2017-02-05 03:28:20 (2.95 MB/s) - ‘CentOS-7-x86_64-Minimal-1611.iso’ saved [713031680]
real 3m51.013s
user 0m0.439s
sys 0m3.332s
3分51秒でダウンロードが完了しました。
##aria2でコネクション1本のみでダウンロード
$ time aria2c ftp://ftp.nara.wide.ad.jp/pub/Linux/centos/7.3.1611/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso
*** Download Progress Summary as of Sun Feb 5 03:33:36 2017 ***
# (中略)
Download Results:
gid |stat|avg speed |path/URI
======+====+===========+=======================================================
2dc327|OK | 3.0MiB/s|/home/centos/ariatest/CentOS-7-x86_64-Minimal-1611.iso
Status Legend:
(OK):download completed.
real 3m46.602s
user 0m1.865s
sys 0m2.487s
3分46秒でダウンロードが完了しました。
コネクション1本では他のツールと変わりませんね。
##aria2でコネクション5本を用いた並列ダウンロード
【コマンドライン引数】
-x5 同時接続のコネクション数
$ time aria2c -x5 ftp://ftp.nara.wide.ad.jp/pub/Linux/centos/7.3.1611/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso
[#b1ee67 674MiB/680MiB(99%) CN:2 DL:14MiB]
02/05 03:38:34 [NOTICE] Download complete: /home/centos/ariatest/CentOS-7-x86_64-Minimal-1611.iso
Download Results:
gid |stat|avg speed |path/URI
======+====+===========+=======================================================
b1ee67|OK | 14MiB/s|/home/centos/ariatest/CentOS-7-x86_64-Minimal-1611.iso
Status Legend:
(OK):download completed.
real 0m46.740s
user 0m1.820s
sys 0m2.620s
46秒でダウンロードが完了しました。
約5倍の高速化ですのでコネクション数に比例した性能が得られています。
##aria2で2台のサーバから分散並列ダウンロード
【コマンドライン引数】
-x10 同時接続のコネクション数
-s10 複数サーバへの並列接続時に指定するコネクション数
-k1M 分散ダウンロード時のブロックサイズ (ここでは1MiBを指定。ディフォルトは20MiB)
(URI) 同じファイルが配置されている、複数のURIを指定
$ time aria2c -x10 -s10 -k1M ftp://ftp.nara.wide.ad.jp/pub/Linux/centos/7.3.1611/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso http
://ftp.jaist.ac.jp/pub/Linux/CentOS/7.3.1611/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso
[#5c29a9 679MiB/680MiB(99%) CN:2 DL:19MiB]
02/05 03:50:12 [NOTICE] Download complete: /home/centos/ariatest/CentOS-7-x86_64-Minimal-1611.iso
Download Results:
gid |stat|avg speed |path/URI
======+====+===========+=======================================================
6ad9b5|OK | 22MiB/s|/home/centos/ariatest/CentOS-7-x86_64-Minimal-1611.iso
Status Legend:
(OK):download completed.
real 0m30.583s
user 0m1.907s
sys 0m2.576s
30秒でダウンロードが完了しました。
約7.5倍の高速化となりました。
理論的には約10倍高速化されるはずでしたが、そこまで高速化されなかったのは、接続先サイトや通信経路の性能にバラツキがあることが原因ではないでしょうか。
##本当に2台のサーバに接続されているか?
netstatコマンドの出力を確認。(不要な行は削除してあります)
$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:56926 ftp.jaist.ac.jp:http ESTABLISHED
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:54978 ftp.nara.wide.ad.jp:ftp ESTABLISHED
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:56932 ftp.jaist.ac.jp:http ESTABLISHED
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:54976 ftp.nara.wide.ad.jp:ftp ESTABLISHED
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:56928 ftp.jaist.ac.jp:http ESTABLISHED
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:55018 ftp.nara.wide.ad.jp:ftp ESTABLISHED
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:56930 ftp.jaist.ac.jp:http ESTABLISHED
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:55026 ftp.nara.wide.ad.jp:ftp ESTABLISHED
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:55020 ftp.nara.wide.ad.jp:ftp ESTABLISHED
tcp 0 0 ip-xxx-xxx-xxx-xxx.a:56934 ftp.jaist.ac.jp:http ESTABLISHED
5本ずつ計10本の接続が確認出来ました。
##torrentも試してみる
$ aria2c http://ftp.nara.wide.ad.jp/pub/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1611.torrent
02/05 04:25:21 [NOTICE] Download complete: /home/centos/ariatest/CentOS-7-x86_64-Minimal-1611.torrent
02/05 04:25:21 [NOTICE] IPv4 DHT: listening on UDP port 6954
02/05 04:25:21 [NOTICE] IPv4 BitTorrent: listening on TCP port 6931
02/05 04:25:21 [NOTICE] IPv6 BitTorrent: listening on TCP port 6931
[#e7f396 SEED(0.0) CN:44 SD:0]
torrentの場合、ダウンロード終了後に他の人に配信するモードに切り替わるらしく、プロセスが終了しません。
そのため正確な処理時間は測定出来ませんでしたが、概ね40秒程度でダウンロードが完了していました。
上記、コネクション5本を用いた並列ダウンロードよりやや高速ですので、torrentが使えるならこちらの方が速いかもしれませんね。
#ご注意
aria2公式サイトにも記載されていますが、多数のコネクションを用いた並列ダウンロードは相手側サーバに大きな負荷がかかることがあるため、ほどほどに活用しましょう。