ネットワークの切断、ネットワークのジッタ、サーバーの負荷が高い、クライアントでのフルガベージコレクション (GC) などが原因で、クライアントを使用して Tablestore にアクセスするときにタイムアウトエラーが発生することがあります。この場合は、具体的な原因に基づいて問題を解決する必要があります。
問題の説明
Tablestore SDK for Java を使用して Tablestore にアクセスすると、"予期しないエラー: java.net.SocketTimeoutException" エラーが発生します。エラーの例:
content: 11:56:48.072 WARN com.alicloud.openservices.tablestore.core.utils.LogUtil - TraceId:4bc30ca1-f112-2d52-d8b1-61a95072eda5 失敗 再試行回数:1 com.alicloud.openservices.tablestore.ClientException: 予期しないエラー: java.net.SocketTimeoutException考えられる原因
リクエストが送信されてからレスポンスが返されるまでの時間が上限を超えています。上限は socketTimeoutInMillisecond パラメーターで指定されます。パラメーターのデフォルト値は 30000 です。単位はミリ秒です。
ほとんどの場合、socketTimeoutInMillisecond パラメーターに小さすぎる値を指定しないことをお勧めします。ClientConfiguration で socketTimeoutInMillisecond パラメーターの値を指定できます。
考えられる原因:
クライアントでフル GC が実行されています。
異なるネットワークやネットワークジッタなどのネットワークの問題が発生しました。
サーバーのレイテンシが socketTimeoutInMillisecond パラメーターの値よりも高くなっています。
解決策
クライアントでフル GC が実行されているかどうかを確認します。
jmap や jcmd などのツールを使用して、Java 仮想マシン (JVM) のトラブルシューティングを行います。たとえば、JVM のメモリ使用量を確認し、メモリ不足 (OOM) が発生しているかどうかを確認します。
OOM エラーが発生した場合、HttpClient バックグラウンドの I/O スレッドが終了します。次の方法を使用して問題を解決します。
メモリが不適切に使用されている場合、またはメモリリークが発生している場合は、コードを最適化します。
メモリが適切に使用されているが、JVM リソースが不足している場合は、メモリを増やします。
JVM がアイドル状態で少量のメモリが使用されている場合は、JVM のヒープメモリを増やしてエラーの発生確率を減らします。
サーバーの負荷、ネットワークエラー率、または CPU 使用率が高い場合に "SocketTimeoutException" エラーが発生します。前述のシナリオでは、リクエストが送信される前にリクエストがタイムアウトになります。
クライアントとサーバー間のネットワーク接続を確認します。
すべてのリクエストで "SocketTimeoutException" エラーが発生する場合は、ネットワークが切断されている可能性があります。ping コマンドまたは curl コマンドを実行して、ネットワーク接続をテストできます。
次のサンプルコードは、ネットワーク接続をテストする方法の例を示しています。この例では、myinstance という名前のインスタンスが使用されています。
ping myinstance.cn-hangzhou.ots.aliyuncs.com curl myinstance.cn-hangzhou.ots.aliyuncs.comネットワーク障害が発生した場合、Elastic Compute Service (ECS) 以外の環境で内部エンドポイントを使用できます。適切なエンドポイントを使用してください。詳細については、エンドポイント を参照してください。
ECS 環境からクライアントを使用して Tablestore にアクセスする場合は、仮想プライベートクラウド (VPC) またはクラシックネットワーク経由で Tablestore にアクセスすることをお勧めします。
ネットワークが接続されている場合、ネットワークジッタが原因で全体的なレイテンシが高くなる可能性があります。トラフィック、帯域幅の使用率、またはパケット再送信率が高いかどうかを確認します。ネットワークジッタが高い場合は、ネットワークエンジニアに連絡して問題のトラブルシューティングを行ってください。
次の手順を実行して、サーバーのレイテンシが高いかどうかを確認します。
Tablestore コンソール にログインします。
上部のナビゲーションバーで、リソースグループとリージョンを選択します。
概要ページのインスタンスリストで、インスタンスの名前をクリックします。
インスタンスの詳細タブのテーブルセクションで、データテーブルの名前をクリックします。
テーブルの管理ページのモニタリング指標タブで、テーブルまたはインデックスを選択し、時間範囲を指定し、メトリックグループを平均レイテンシに設定して、さまざまな操作タイプの平均レイテンシを表示します。
サーバーのレイテンシが socketTimeoutInMillisecond パラメーターの値よりも大きい場合は、チケットを送信して、Tablestore テクニカルサポートに連絡してください。
