Help us understand the problem. What is going on with this article?

curlやwgetの数倍速い 爆速ダウンローダー aria2を使う

More than 3 years have passed since last update.

はじめに

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公式サイトにも記載されていますが、多数のコネクションを用いた並列ダウンロードは相手側サーバに大きな負荷がかかることがあるため、ほどほどに活用しましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした