2015-05-08 69 views
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個。

+0

什麼版本的驅動程序?在java-driver中有已知的連接泄漏,應該已經被2.0.9和2.1.5所修復。 –

+0

cassandra-driver-core-2.0.1.jar – Snail

+1

這是一個過時的版本,所以我認爲它值得升級到2.0.10。我相對有信心能解決你的問題。 此外,不應將您的cassandra.yaml文件中配置的SocketOptions.setReadTimeoutMillis()配置爲小於read_request_timeout_in_ms的值。 ReadTimeoutMillis僅用作故障安全。 –

回答

0

我將我的java驅動程序從cassandra-driver-core-2.0.1.jar更新爲cassandra-driver-core-2.1.4.jar問題解決了。