排查 Gremlin Java 客户端异常 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

排查 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 连接。通过增加客户的maxSimultaneousUsagePerConnectionmaxInProcessPerConnection设置。通常,这些设置应具有相同的值。

    • 增加连接池中的连接数。通过增加客户的maxConnectionPoolSize设置。成本增加了资源消耗,因为每个连接都使用内存和操作系统文件描述符,并且在初始化过程中需要 SSL 和 WebSocket 握手。