TITAN- 并行查询 - org.apache.tinkerpop.gremlin.driver.Client.submit 的并发超时异常

TITAN- Parallel queries -Concurrent time out exception at org.apache.tinkerpop.gremlin.driver.Client.submit

作为容量和性能测试的一部分,我正在尝试使用 java 线程并行执行多个 gremlin 请求(图形遍历)。它工作正常的线程数量较少。

当我增加线程数(比如 500)时,出现以下错误

Exception in thread "Thread-34" java.lang.RuntimeException: java.lang.RuntimeException: java.util.concurrent.TimeoutException: Timed out waiting for an available host. at org.apache.tinkerpop.gremlin.driver.Client.submit(Client.java:146) at com.tests.java.titan.Vertices.exists(Vertices.java:37) at com.tests.java.titan.Complex.searchNodesRelatedByRelation(Complex.java:110) at com.tests.java.perfTests.TitanThread.run(ParallelGraphTraversal.java:112) Caused by: java.lang.RuntimeException: java.util.concurrent.TimeoutException: Timed out waiting for an available host. at org.apache.tinkerpop.gremlin.driver.Client.submitAsync(Client.java:194) at org.apache.tinkerpop.gremlin.driver.Client.submitAsync(Client.java:174) at org.apache.tinkerpop.gremlin.driver.Client.submit(Client.java:144) ... 3 more

我尝试将 threadPoolWorker 的值从 1 增加到 2,将 gremlinPool 的值从 8 增加到 16(在文件 gremlin-server.yaml 中)。但是我没发现有什么不同。

有人遇到过这个问题吗?你能告诉我同时连接的最大数量是否有限制吗?

Our environment: CDH 5.7.1, Titan 1.1.0-SNAPSHOT, Solr 4.10.3, HBase 1.2.0, titan-tp3-driver to create remote connection to gremlin server and for querying

服务器上的 gremlinPool 设置往往被限制为 Runtime.availableProcessors(),因此将数字设置得更大通常没有意义。服务器将支持的请求数在某种程度上取决于您执行的遍历类型。我可以想象您发送一系列较长的 运行 请求的情况,这些请求可能会占用多个 gremlinPool 线程,从而降低服务器本身的脚本处理能力。 Gremlin Server 可能会继续接受请求,将它们存储在队列中以便在它们到达时进行处理,但它们的处理时间会更长。

这种情况本身不应强制出现此错误,但 driver 的默认设置可能不足以满足您的要求。 driver 有一个 load of settings,它控制到服务器的消息流。如果 driver 的状态对于特定主机而言超出了这些设置的范围,它将忽略该主机并寻找另一个主机。例如,如果超过了 connectionPool.maxInProcessPerConnection 并且因为它也已达到最大值而无法添加额外的连接,那么在 driver 选择下一个发送消息的主机的过程中将忽略该主机到。这样,特定主机就不会因为客户端的请求而过载。

在您的情况下,我假设您的配置中没有其他主机,因此由于没有其他地方可以发送这些请求,driver 会尝试等待连接释放自己。如果我们考虑我们的示例,那么它会等待处理中的请求数低于 connectionPool.maxInProcessPerConnection。 driver 会等多久?它会等待 connectionPool.maxWaitForConnection。如果超过该时间,您将收到您所看到的错误消息。