本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排查 Gremlin Java 客户端异常
Gremlin Java 客户端抛出特定于其操作的异常。本节提供了帮助您排查的额外信息。
java.util.concurrent.TimeoutException
问题排查
Gremlin Java 客户端抛出java.util.concurrent.TimeoutException
当 Gremlin 请求在客户端本身等待其中一个插槽时超时 WebSocket 连接才能变为可用。此超时持续时间由maxWaitForConnection
客户端可配置参数。
由于在客户端超时的请求永远不会发送到服务器,因此它们不会反映在服务器捕获的任何指标中,例如GremlinRequestsPerSec
.
这种超时通常由以下两种方式之一造成:
-
服务器实际上达到了最大容量。如果是这种情况,服务器上的队列已满,您可以通过监控主要请求队列待处理请求 CloudWatch 指标。服务器可以处理的 parallel 查询的数量取决于其实例大小。
如果
MainRequestQueuePendingRequests
指标不显示服务器上挂起的请求的积聚,然后服务器可以处理更多的请求,而超时是由客户端限制造成的。 -
客户端限制请求。这通常可以通过更改客户端配置设置来修复。
客户端可以发送的最大 parallel 请求数可以大致估计如下:
maxParallelQueries = maxConnectionPoolSize * Max( maxSimultaneousUsagePerConnection, maxInProcessPerConnection )
发送超过
maxParallelQueries
给客户的原因java.util.concurrent.TimeoutException
例外。您通常可以通过多种方式解决此问题:延长连接超时持续时间。如果延迟对你的应用程序不是至关重要的,请增加客户端的
maxWaitForConnection
设置。然后,客户在超时之前等待更长时间,这反过来又会增加延迟。增加每个连接的最大请求数。这允许使用相同的请求发送更多请求 WebSocket 连接。通过增加客户的
maxSimultaneousUsagePerConnection
和maxInProcessPerConnection
设置。通常,这些设置应具有相同的值。增加连接池中的连接数。通过增加客户的
maxConnectionPoolSize
设置。成本增加了资源消耗,因为每个连接都使用内存和操作系统文件描述符,并且在初始化过程中需要 SSL 和 WebSocket 握手。