このトピックでは、Object Storage Service (OSS) でのオブジェクトのアップロードおよびダウンロード速度が遅い原因と、その解決策について説明します。
原因
アップロードおよびダウンロードの速度は、クライアントの帯域幅と ISP のネットワークリンクによって制限されます。
ソリューション
OSS SDK を使用しないトラブルシューティング
アップロードまたはダウンロード方法を確認します。
OSS コンソール、または ossfs、ossbrowser、ossftp などのツールでのアップロードまたはダウンロードが遅い場合は、代わりに ossutil を使用します。ossutil は、サイズの大きいオブジェクトや多数のオブジェクトをより効率的に処理します。詳細については、「cp (ファイルのアップロード)」および「cp (オブジェクトのダウンロード)」をご参照ください。
ossutil を使用しても速度が改善されない場合は、次の手順に進みます。
帯域幅または QPS が制限を超えていないか確認します。
OSS コンソールにログインします。
左側のナビゲーションペインで、[バケット] をクリックし、目的のバケットをクリックします。
左側のナビゲーションペインで [データ使用量] > [基本データ] を選択し、帯域幅または QPS が制限を超えていないか確認します。
デフォルトの帯域幅制限:中国本土では 10 Gbit/s、その他のリージョンでは 5 Gbit/s。制限を超えると、リクエストはスロットリングされます。
デフォルトの QPS 制限:10,000。超過したリクエストは拒否されます。
クライアントとサーバー間で、MTR ツールを使用してバケットのエンドポイントのパケット損失をテストします。
説明内部ネットワーク経由でオブジェクトをアップロードする場合は、内部エンドポイントを使用してください。
ossutil probe コマンドを実行して、ネットワーク接続性とアップロード速度をテストします。詳細については、「probe」をご参照ください。
クライアントとバケット間の長距離ネットワーク接続を確認します。
たとえば、バケットが中国 (杭州) リージョンにあり、クライアントが香港 (中国) にある場合、ネットワークリンクの制限により転送が遅くなることがあります。この問題を解決するには、転送アクセラレーションを有効にしてください。
転送アクセラレーションは、グローバルに分散されたデータセンターを使用して転送を高速化します。リクエストが送信されると、最適なネットワークパスとプロトコルを介して、バケットが配置されているデータセンターにルーティングされ、インターネットベースの OSS アクセスに対してエンドツーエンドのアクセラレーションを提供します。詳細については、「転送アクセラレーションを使用した OSS へのアクセス」をご参照ください。
説明転送アクセラレーションは 30 分以内に有効になります。アクセラレーションエンドポイントが正しく設定されていることを確認してください。
グローバルアクセラレーションエンドポイント:
oss-accelerate.aliyuncs.com。すべてのリージョンのバケットのデータ転送を高速化します。中国本土以外のアクセラレーションエンドポイント:
oss-accelerate-overseas.aliyuncs.com。このエンドポイントを使用して、ICP 登録なしでカスタムドメイン名を、香港 (中国) または中国本土以外の他のリージョンにあるバケットにマッピングします。
OSS SDK を使用したトラブルシューティング
次の例では、OSS SDK for Python を使用して、アップロードが遅い場合のトラブルシューティングを行います。
アップロード方法を確認します。100 MB を超えるオブジェクトの場合は、再開可能なアップロードを使用してください。詳細については、「マルチパートアップロード」をご参照ください。すでに再開可能なアップロードを使用している場合は、次の手順に進みます。
再開可能なアップロードを使用する場合は、次のパラメーターを確認します。
multipart_threshold:マルチパートアップロードのオブジェクトサイズのしきい値。単位:バイト。
part_size:各パートのサイズ。単位:バイト。オブジェクトサイズに基づいて設定してください。1 GB を超えるオブジェクトの場合は、100 MB に設定してください。
説明接続が安定している場合はパートサイズを大きくしてください。接続が不安定な場合は小さくしてください。
num_threads:同時アップロードスレッドの数。通常は 4 に設定します。
推奨設定:
multipart_threshold=100*1024*1024, part_size=100*1024*1024, num_threads=4CRC-64 が有効になっているかどうかを確認します。
CRC-64 が有効になっている場合は、OSSClient の初期化時に無効にしてください。Content-MD5 リクエストヘッダーを追加して、代わりに MD5 を使用してください。OSS SDK for Python の初期化方法の詳細については、「初期化」をご参照ください。
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = 'yourEndpoint' # バケット名を指定します。例: examplebucket。 # enable_crc=False は、CRC-64 が無効になっていることを指定します。 bucket = oss2.Bucket(auth, endpoint, 'examplebucket',enable_crc=False)説明CRC-64 はデータ整合性を検証するだけで、データセキュリティは保証しません。