このトピックでは、Object Storage Service (OSS) のオブジェクトのアップロード速度とダウンロード速度が遅い原因と解決策について説明します。
原因
オブジェクトのアップロード速度とダウンロード速度は、クライアントのローカル帯域幅とインターネットサービスプロバイダ (ISP) のネットワークリンクによって制限されます。
ソリューション
OSS SDKを使用せずにオブジェクトをアップロードまたはダウンロードするときの速度が遅いというトラブルシューティング
オブジェクトのアップロードまたはダウンロード方法を確認します。
OSSコンソールで、またはossfs、ossbrowser、ossftpなどのツールを使用してオブジェクトをアップロードまたはダウンロードするときに速度が遅い場合は、ossutilを使用することを推奨します。 ossutilはより効率的で、大きなオブジェクトまたは多数のオブジェクトをアップロードできます。 詳細については、「オブジェクトのアップロード」および「オブジェクトのダウンロード」をご参照ください。
ossutilを使用してアップロードまたはダウンロード速度が向上しない場合は、次の手順に進みます。
ネットワークの帯域幅と1秒あたりのクエリ数 (QPS) が制限を超えているかどうかを確認します。
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。 [バケット] ページで、オブジェクトをアップロードまたはダウンロードするバケットの名前をクリックします。
左側のナビゲーションウィンドウで、[データ使用量] > [基本統計] を選択し、ネットワークの帯域幅とQPSが制限を超えているかどうかを確認します。
デフォルトの帯域幅制限: 中国本土のリージョンで10 Gbit/s、中国本土以外のリージョンで5 Gbit/s。 帯域幅の制限に達すると、リクエストは抑制されます。
デフォルトのQPS制限: 10,000。 QPS制限に達すると、リクエストは拒否されます。
ローカルネットワーク環境を確認し、MTRを使用してバケットドメイン名をテストし、クライアントとサーバー間のリンクでパケット損失が発生していないかどうかを確認します。 詳細については、「接続性テスト」をご参照ください。
説明内部ネットワーク経由でオブジェクトをアップロードする場合は、内部エンドポイントを使用します。
ossutilのprobeコマンドを実行して、ネットワーク環境とアップロード速度を確認し、ossutilとOSS間のネットワーク接続を確認します。 詳細については、「probe」をご参照ください。
クライアントとOSSバケット間にクロスボーダーネットワーク接続が含まれているかどうかを確認します。
たとえば、OSSバケットは中国 (杭州) リージョンにあり、クライアントは中国 (香港) リージョンにあります。 この場合、クライアントは国境を越えたリンクによって制限されます。 転送アクセラレーション機能を有効にできます。
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を超える場合、part_sizeパラメーターを100 MBに設定することを推奨します。
説明ネットワーク接続が安定している場合は各パーツのサイズを大きくし、ネットワーク接続が不安定な場合は各パーツのサイズを小さくすることを推奨します。
num_threads: 同時アップロードのスレッド数。 ほとんどの場合、num_threadsパラメーターは4に設定されます。
推奨設定:
multipart_threshold=10000*1024、part_size=10000*1024、num_threads=4
CRC-64が有効かどうかを確認します。
CRC-64が有効な場合は、OSSClientインスタンスの初期化時にCRC-64を無効にすることを推奨します。 Content-MD5のリクエストヘッダーをリクエストに追加することで、CRC-64をMD5に置き換えることができます。 OSS SDK For Pythonを初期化する方法の詳細については、「初期化」をご参照ください。
# -*-コーディング: utf-8 -*- oss2のインポート oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、yourEndpointパラメーターを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はデータの検証にのみ使用され、データのセキュリティは保証されません。