翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
java.util.concurrent.TimeoutException
のトラブルシューティング
Gremlin Java クライアントは、Gremlin リクエストがクライアント自体でタイムアウトし、いずれかの WebSocket 接続のスロットが利用可能になるのを待っているjava.util.concurrent.TimeoutException
ときに をスローします。このタイムアウト期間は、maxWaitForConnection
クライアント側の設定可能なパラメータにより制御します。
注記
クライアントでタイムアウトしたリクエストはサーバーに送信されないため、GremlinRequestsPerSec
のような、サーバーでキャプチャされたメトリクスには反映されません。
この種のタイムアウトは、通常、次の 2 つの方法のいずれかで発生します。
-
サーバが実際に最大容量に達した。この場合、サーバー上のキューがいっぱいになり、MainRequestQueuePendingRequests CloudWatch メトリクスをモニタリングすることで検出できます。サーバーが処理できる並列クエリの数は、インスタンスのサイズによって異なります。
MainRequestQueuePendingRequests
メトリクスが、サーバー上の保留中のリクエストのビルドアップを表示しなければ、サーバーはリクエストをさらに処理でき、タイムアウトはクライアント側のスロットリングによって生じます。 -
クライアントによるリクエストのスロットル。これは通常、クライアント構成設定を変更することで修正できます。
クライアントが送信できる並列要求の最大数は、おおむね次のように推定できます。
maxParallelQueries = maxConnectionPoolSize * Max( maxSimultaneousUsagePerConnection, maxInProcessPerConnection )
クライアントに
maxParallelQueries
以上を送信するとjava.util.concurrent.TimeoutException
例外の原因になります。通常、いくつかの方法で修正できます。接続タイムアウト時間を増やす。アプリケーションでレイテンシーが重要でない場合は、クライアントの
maxWaitForConnection
設定を増やします。その後、クライアントはタイムアウトするまで待機時間が長くなり、代わりにレイテンシーが増加する可能性があります。接続あたりの最大リクエスト数を増やす。これにより、同じ WebSocket 接続を使用してより多くのリクエストを送信できます。クライアントの
maxSimultaneousUsagePerConnection
およびmaxInProcessPerConnection
設定を増やしてこれを行います。これらの設定には通常、同じ値が設定されています。接続プール内の接続数を増やす。クライアントの
maxConnectionPoolSize
設定を増やしてこれを行います。各接続ではメモリとオペレーティングシステムのファイル記述子が使用され、初期化時に SSLと WebSocket のハンドシェイクが必要になるため、リソースの消費量が増加します。