排查 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 指标。服务器可以处理的并行查询的数量取决于其实例大小。

    如果MainRequestQueuePendingRequests指标不显示服务器上挂起的请求的积聚,然后服务器可以处理更多的请求,而超时是由客户端限制造成的。

  • 客户端限制请求。这通常可以通过更改客户端配置设置来修复。

    客户端可以发送的最大并行请求数可以大致估计如下:

    maxParallelQueries = maxConnectionPoolSize * Max( maxSimultaneousUsagePerConnection, maxInProcessPerConnection )

    发送超过maxParallelQueries给客户的原因java.util.concurrent.TimeoutException例外。通常您可以通过多种方式解决此问题:

    • 延长连接超时持续时间。如果延迟对你的应用程序不是至关重要的,请增加客户端的maxWaitForConnection设置。然后,客户在超时之前等待更长时间,这反过来又会增加延迟。

    • 增加每个连接的最大请求数。这允许使用相同的 WebSocket 连接发送更多请求。通过增加客户的maxSimultaneousUsagePerConnectionmaxInProcessPerConnection设置。通常,这些设置应具有相同的值。

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