AWS CLI S3でパフォーマンスが出ないときの対処法
-
カテゴリ:
- サーバ
-
タグ:
- #AWS
「AWS CLIを使ってCentOS7からS3へファイル転送する方法」の続きで、AWS CLIでS3にファイル連携をしたけど思いのほかパフォーマンスが出なかったので、その時調べた対処法を簡単にメモしておきます。
パフォーマンスを上げるためにはAWS CLIの設定をいじる必要があるのですが、設定変更には以下の2通りの方法があります。
- 「aws configure set 」コマンドを使う
- 「~/.aws/config」の設定ファイルを直接変更する
上記の方法でコマンドを使う方法がありますが、これは結局コマンドの結果を「~/.aws/config」に書き込んでいるだけなので設定ファイルを直接変更するのと結果的に変わりません。
ただコマンドを使ったほうが記述が間違っていた時にエラーになるので、多少は安全です。
打ち間違えをしない方は設定ファイルを直接変更したほうが手っ取り早いですが、そこは好みだと思います。
転送速度が遅き時の対処法
設定値の説明
転送パフォーマンスに影響する設定を変更します。
以下4つのパラメータを変更していきます。
パラメータ名 | デフォルト | 概要 |
---|---|---|
max_concurrent_requests | 10 | 転送を並列処理するための設定値。マルチパートに分解した際、1パートを転送する際に同時並列処理する数。 |
max_queue_size | 1000 | メモリに格納するタスクキューの最大値。 |
multipart_threshold | 8MB | ファイルをマルチパートに分割する閾値 |
multipart_chunksize | 8MB | ファイルをマルチパートに分割した後、1パートのファイルサイズ |
「max_concurrent_requests」と「max_queue_size」は単純に設定値を上げればファイル処理のパフォーマンスは上がれいますが、その分サーバに負荷がかあります。
「max_concurrent_requests」は並列処理をするのでCPUに負荷がかかるし、「max_queue_size」メモリを圧迫するので上げすぎには注意が必要です。
「multipart_threshold」と「multipart_chunksize」はマルチパートに関わる設定値です。マルチバートはファイルを分割して転送する方式で、「multipart_threshold」はマルチパートに移行する閾値、「multipart_chunksize」はマルチパートに移行した際の1パートのサイズになるので合わせて設定してください。
マルチパートは一度に複数のファイルを転送ぜず、1ファイルあたりのサイズが大きい時などに効果的です。
設定方法
設定方法は記事の最初にもある通りコマンドを利用する方法と、設定ファイルを変更する方法の2種類あります。
コマンドを利用して設定を変更する。
$ aws configure set default.s3.max_concurrent_requests 15
$ aws configure set default.s3.max_queue_size 10000
$ aws configure set default.s3.multipart_threshold 1G
$ aws configure set default.s3.multipart_chunksize 1G
「~/.aws/config」の設定ファイルを直接変更する方法
[default]
s3 =
max_concurrent_requests = 15
max_queue_size = 10000
multipart_threshold = 1G
multipart_chunksize = 1G
※上記設定値はあくまで概算値です。各自お使いのサーバに適した設定を検証してください。
追記として、上記はAWSコマンドのデフォルトの設定を変更しましたが、profileごと設定することも可能です。
※profile名を「sample_profile」として例コマンドを利用して設定を変更する。
$ aws configure set s3.max_concurrent_requests 15 --profile sample_profile
$ aws configure set s3.max_queue_size 10000 --profile sample_profile
$ aws configure set s3.multipart_threshold 1G --profile sample_profile
$ aws configure set s3.multipart_chunksize 1G --profile sample_profile
[profile sample_profile]
s3 =
max_concurrent_requests = 15
max_queue_size = 10000
multipart_threshold = 1G
multipart_chunksize = 1G
通信の帯域幅が多い時の対処法
設定の仕方や、サーバ構成、ネットワークの太さなどによっては帯域幅を調整する必要が出てきます。
自分の場合も、大き目のファイルを転送する際に通信の帯域をほとんど占領してしまい、他の通信に影響が出る恐れがあったため調整する必要がありました。
設定値の説明
帯域幅の調整には以下2つのパラメータを変更していきます。
パラメータ名 | デフォルト | 概要 |
---|---|---|
max_bandwidth | 制限なし | AWS S3との間でアップロードやダウンロードする際の最大帯域幅。 |
max_concurrent_requests | 10 | 転送を並列処理するための設定値。マルチパートに分解した際、1パートを転送する際に同時並列処理する数。 |
「max_bandwidth」はファイル転送時に、転送できる最大のサイズを制限することが可能です。
「max_concurrent_requests」は上記で出てきたので説明は割愛しますが、並列処理が多くなるとその分占領する帯域も増えるので設定値を下げるか、もしくは並列処理をやめる必要があります。
設定方法
並列処理は止め、最大帯域幅を200MBに制限します。
コマンドを利用して設定を変更する。
$ aws configure set default.s3.max_bandwidth 200MB/s
$ aws configure set default.s3.max_concurrent_requests 1
「~/.aws/config」の設定ファイルを直接変更する方法
[default]
s3 =
max_bandwidth = 200MB/s
max_concurrent_requests 1