

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# `java.util.concurrent.TimeoutException` のトラブルシューティング
<a name="best-practices-gremlin-java-exceptions-TimeoutException"></a>

Gremlin Javaクライアントは、WebSocket 接続の 1 つのスロットが使用可能になるのを待っている間、クライアント自体で Gremlin 要求がタイムアウトしたとき `java.util.concurrent.TimeoutException` をスローします。このタイムアウト期間は、`maxWaitForConnection` クライアント側の設定可能なパラメータにより制御します。

**注記**  
クライアントでタイムアウトしたリクエストはサーバーに送信されないため、`GremlinRequestsPerSec` のような、サーバーでキャプチャされたメトリクスには反映されません。

この種のタイムアウトは、通常、次の 2 つの方法のいずれかで発生します。
+ **サーバが実際に最大容量に達した。**この場合、サーバ上のキューがいっぱいになります。この状態は、[MainRequestQueuePendingRequests](cw-metrics.md#cw-metrics-available) CloudWatch メトリクスのモニタリングで検出できます。サーバーが処理できる並列クエリの数は、インスタンスのサイズによって異なります。

  `MainRequestQueuePendingRequests` メトリクスが、サーバー上の保留中のリクエストのビルドアップを表示しなければ、サーバーはリクエストをさらに処理でき、タイムアウトはクライアント側のスロットリングによって生じます。
+ **クライアントによるリクエストのスロットル。**これは通常、クライアント構成設定を変更することで修正できます。

  クライアントが送信できる並列要求の最大数は、おおむね次のように推定できます。

  ```
  maxParallelQueries = maxConnectionPoolSize * Max( maxSimultaneousUsagePerConnection, maxInProcessPerConnection )
  ```

  クライアントに `maxParallelQueries` 以上を送信すると `java.util.concurrent.TimeoutException` 例外の原因になります。通常、いくつかの方法で修正できます。
  + *接続タイムアウト時間を増やす。*アプリケーションでレイテンシーが重要でない場合は、クライアントの `maxWaitForConnection` 設定を増やします。その後、クライアントはタイムアウトするまで待機時間が長くなり、代わりにレイテンシーが増加する可能性があります。
  + *接続あたりの最大リクエスト数を増やす。*これにより、同じ WebSocket 接続を使用してより多くのリクエストを送信できます。クライアントの `maxSimultaneousUsagePerConnection` および `maxInProcessPerConnection` 設定を増やしてこれを行います。これらの設定には通常、同じ値が設定されています。
  + *接続プール内の接続数を増やす。*クライアントの `maxConnectionPoolSize` 設定を増やしてこれを行います。各接続でメモリとオペレーティングシステムのファイルディスクリプタが使用され、初期化時に SSL および WebSocket ハンドシェイクが必要になるため、リソース消費が増加するという対価が伴います。