すべてのプロダクト
Search
ドキュメントセンター

:Java SDK エラー:SocketTimeoutException

最終更新日:Mar 23, 2020

症状

アプリケーション要求中に SDK が SocketTimeoutException を投げます。

原因

Receive time (SDK がデータを受け取る時刻)と Send time (SDK がデータを送信する時刻)の差が SocketTimeout の値より大きい場合、SDK は SocketTimeoutException を投げます。この期間に、アプリケーションは要求(ネットワーク送信を含む)を送信し、サーバは要求を処理し、アプリケーションは応答(ネットワーク送信を含む)を受信します。OTSClient の作成時に SocketTimeout の値を設定できます。SocketTimeout のデフォルト値は 15 秒です。

解決

問題によっては、SocketTimeoutException が次のように解決されることがあります。

  • ネットワークが切断されています。

    ping または curl コマンドを実行してネットワーク接続を確認します。特に、すべての要求に対して SocketTimeoutException が投げられた場合は特にそうです。

    1. ping aaaa.cn-hangzhou.ots.aliyuncs.com
    2. curl aaaa.cn-hangzhou.ots.aliyuncs.com
    • ネットワークが接続され、 curl コマンドが実行されると、次のような結果が返されます。

      1. <?xml version="1.0" encoding="UTF-8"?>
      2. <Error><Code>OTSUnsupportOperation</Code><Message>Unsupported operation: ''.</Message><RequestID>00054ec5-822c-8964-adaf-990a07a4d0c9</RequestID><HostID>MTAuMTUzLjE3NS4xNzM=</HostID></Error>
    • ネットワークが切断されている場合は、非 ECS 環境でイントラネットエンドポイントが使用されているかどうかを確認します。

  • サーバーの処理時間が、SDK が SocketTimeout に指定した時間を超えています。

    通常、テーブルストアサーバーは 15 秒以内に要求を処理します。処理時間がサーバーのタイムアウト時間(通常は 10 秒)を超えた場合、サーバーは OTSTimeout をクライアントに返します。

    SocketTimeoutException は、SocketTimeout に小さい値が設定された場合に投げられます。(2 秒など)。

  • ネットワークの伝送速度が遅い。

    サーバの処理時間に影響を与えなくても、ネットワーク伝送速度が遅いために遅延が発生すると SocketTimeoutException が投げられることがあります。この場合、トラフィック量が多いか、帯域幅が不足しているか、ネットワーク再送率が高いかどうかを確認してください。

  • ガベージコレクション (GC) ( フル GC を含む ) は、Java で頻繁に発生します。

    プログラムのロードが高く、GC が頻繁に発生すると、SocketTimeoutException が投げられることがあります。完全な GC が発生すると、アプリケーションは要求の送信や応答の受信に失敗します。その結果、SocketTimeout の SDK で指定された時間が終了し、SocketTimeoutException が投げられます。

    この場合、GC の原因を分析して解決してください。