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