【问题标题】:All the TCP connection b/w DataStax driver to the Cassandra Remain in Active close state . i.e TIME_WAIT state.所有到 Cassandra 的 TCP 连接 b/w DataStax 驱动程序都处于活动关闭状态。即 TIME_WAIT 状态。
【发布时间】:2014-09-13 06:56:22
【问题描述】:

设置:

网络服务器 Apache Tomcat
RestFull 网络服务
使用DataStax java驱动2.0

数据库 -2 节点 Cassandra 2.0.7.31 集群
-replicas=1

问题

在发送 1500 组请求超过 3 次后。我在 tomcat 日志中遇到错误

     com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered))
                at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:64)
                at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214)
                at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169)
                at com.jpmc.es.rtm.storage.impl.EventExtract.main(EventExtract.java:36)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:601)
                at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
    Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered))
                at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:98)
                at com.datastax.driver.core.RequestHandler$1.run(RequestHandler.java:165)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
                at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)

观察 tomcat这个状态之后。所有进一步的请求都达到了同样的命运。那就是驱动程序无法将我的插入请求发送给 cassandra。

执行 net stat 命令后,我发现所有的 TCP 连接 b/w Web 服务器和 Cassandra 都处于 TIMED_WAIT 状态。

可能是什么原因?为什么 Datastax 驱动程序无法将连接收回到池中?或者为什么 Cassandra 使用来自其客户端的所有连接。

提前致谢

【问题讨论】:

    标签: cassandra datastax-java-driver


    【解决方案1】:

    由于调用为每个请求创建多个会话,连接正在增加。现在它工作正常。

             builder = new Cluster.Builder().
                    addContactPoints("192.168.114.42");
    
            builder.withPoolingOptions(new PoolingOptions().setCoreConnectionsPerHost(
                    HostDistance.LOCAL, new PoolingOptions().getMaxConnectionsPerHost(HostDistance.LOCAL)));
    
            cluster = builder
                    .withRetryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE)
                    .withReconnectionPolicy(new ConstantReconnectionPolicy(100L))
                    .build();
            session = cluster.connect("demodb");
    

    现在驱动程序保持 17-26 个连接数,与事务数无关。

    【讨论】:

      猜你喜欢
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多