0
我的應用程序與cassandra的連接不斷增加,MaxConnectionsPerHost不起作用。我在爲什麼?Cassandra連接不斷增加
這是我的配置文件。
Builder builder = Cluster.builder();
builder.withRetryPolicy(DefaultRetryPolicy.INSTANCE);
// JMX 配置
builder.withoutJMXReporting().withoutMetrics();
//DCAwareRoundRobinPolicy dCAwareRoundRobinPolicy = new DCAwareRoundRobinPolicy("DC1", 2);
builder.withLoadBalancingPolicy(new RoundRobinPolicy());
// 添加節點
for (String host : this.agentHosts) {
builder.addContactPoints(host);
}
builder.withPort(this.port);
cluster = builder.build();
PoolingOptions poolingOptions = cluster.getConfiguration().getPoolingOptions();
// 連接池配置
poolingOptions.setMaxConnectionsPerHost(HostDistance.LOCAL, 20).setCoreConnectionsPerHost(HostDistance.LOCAL, 2).setMaxConnectionsPerHost(HostDistance.REMOTE, 20).setCoreConnectionsPerHost(HostDistance.REMOTE, 2);
// socket 鏈接配置
SocketOptions socketOptions = cluster.getConfiguration().getSocketOptions();
socketOptions.setKeepAlive(true).setReceiveBufferSize(1024 * 1024).setSendBufferSize(1024 * 1024).setConnectTimeoutMillis(5 * 1000).setReadTimeoutMillis(1000);
//builder.withSocketOptions(socketOptions);
// Query 配置
QueryOptions queryOptions = cluster.getConfiguration().getQueryOptions();
queryOptions.setConsistencyLevel(ConsistencyLevel.ONE);
//builder.withQueryOptions(queryOptions);
logger.info("Connected to cluster: {}\n", cluster.getMetadata().getClusterName());
cassandraSession = cluster.connect(KEY_SPACE);
正如你所看到的,我設置了MaxConnectionsPerHost是20,但連接與卡桑德拉擁有一些通常超過20 的細節是我的應用程序部署在192.168.1.23和卡桑德拉主機是192.168。 1.12〜192.168.1.19,主機192.168.1.12〜192.168.1.16是數據中心,192.168.1.17〜192.168.1.19是另一個數據中心。 192.168.1.23和cassandra主機之間的連接通常超過20個,比如100個。
什麼版本的驅動程序?在java-driver中有已知的連接泄漏,應該已經被2.0.9和2.1.5所修復。 –
cassandra-driver-core-2.0.1.jar – Snail
這是一個過時的版本,所以我認爲它值得升級到2.0.10。我相對有信心能解決你的問題。 此外,不應將您的cassandra.yaml文件中配置的SocketOptions.setReadTimeoutMillis()配置爲小於read_request_timeout_in_ms的值。 ReadTimeoutMillis僅用作故障安全。 –