"Wait future timeout" エラーが発生した場合は、クライアントでフルガベージコレクション (GC) が発生していないこと、リクエスト中に client.shutdown()
メソッドが呼び出されていないことを確認し、サーバーのレイテンシが高すぎるかどうかを確認します。
問題の説明
SDK を使用して API リクエストを送信すると、サーバーに "Wait future timeout" エラーメッセージが表示されます。
原因
リクエストが送信されてからレスポンスが返されるまでの時間が、syncClientWaitFutureTimeoutInMillis パラメーターの値を超えています。syncClientWaitFutureTimeoutInMillis パラメーターのデフォルト値は 60000 ミリ秒です。
syncClientWaitFutureTimeoutInMillis パラメーターを過度に小さい値に設定しないことをお勧めします。ClientConfiguration で syncClientWaitFutureTimeoutInMillis パラメーターの値を指定できます。
このエラーは、次の理由で発生する可能性があります。
リクエスト中に、クライアントでフル GC がトリガーされるか、クライアントで
client.shutdown()
メソッドを呼び出します。サーバーのレイテンシが syncClientWaitFutureTimeoutInMillis パラメーターの値よりも大きくなります。
解決策
クライアントでフル GC がトリガーされるかどうかを確認します。
jmap や jcmd などのツールを使用して、Java 仮想マシン (JVM) のトラブルシューティングを行います。たとえば、JVM のメモリ使用量を確認し、メモリ不足 (OOM) が発生しているかどうかを確認します。
メモリが不適切に使用されている場合、またはメモリリークが発生している場合は、コードを最適化します。
メモリが適切に使用されているが、JVM リソースが不足している場合は、メモリを増やします。
JVM がアイドル状態で、少量のメモリが使用されている場合は、JVM のヒープメモリを増やしてエラーの発生確率を減らします。
さらに、JVM の負荷が大きく、ネットワーク異常率と CPU 使用率が高い場合にも、"Wait future timeout" エラーが発生します。ほとんどの場合、リクエストは送信される前にタイムアウトになっている可能性があります。
リクエスト中にクライアントが
client.shutdown()
メソッドを呼び出したために、コールバックスレッドが閉じているかどうかを確認します。次の手順を実行して、サーバーのレイテンシが高いかどうかを確認します。
Tablestore コンソール にログインします。
上部のナビゲーションバーで、リソースグループとリージョンを選択します。
概要ページのインスタンスリストで、インスタンスの名前をクリックします。
インスタンスの詳細タブのテーブルセクションで、データテーブルの名前をクリックします。
テーブルの管理ページのモニタリング指標タブで、テーブルまたはインデックスを選択し、時間範囲を指定し、メトリックグループを平均レイテンシに設定して、さまざまな操作タイプの平均レイテンシを表示します。
サーバーのレイテンシが syncClientWaitFutureTimeoutInMillis パラメーターの値よりも大きい場合は、チケットを送信して、Tablestore テクニカルサポートに連絡してください。