随着客户端请求数量的增加,Datastax java驱动程序正在创建更多的TCP连接

时间:2014-07-23 12:06:23

标签: cassandra datastax-java-driver

我正在使用JMeter对Cassandra进行负载测试。 系统地增加负载后,我可以看到驱动程序与cassandra的不同节点建立了 58000 Active connection 。 我已经开始使用500并且在10次迭代后再增加500个。像这样我达到2500请求。失败的地方。投掷 NoHOSTAvailableExecption
我认为可能是cassandra失败了。但是当我试图通过使用DataStax驱动程序向cassnadra发送请求时。在不同的系统中运行它运行正常。所以现在我的问题是

  

当我增加DataStax java驱动程序的负载时,它正在打开   更多连接而不是使用现有连接。为什么不呢   使用现有的连接?

2 个答案:

答案 0 :(得分:1)

默认情况下,驱动程序应该只基于群集中的节点数进行连接(我相信每个节点有1个连接)。这让我觉得你的问题在于你的Jmeter代码,而不是Java驱动程序。

在使用本机协议的正常操作中,java驱动程序同时沿每个连接发送多个请求,因此无需打开到同一服务器的多个连接。在提高同时请求的限制方面有一些工作要做。

答案 1 :(得分: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连接数