com.datastax.driver.core.exceptions.OperationTimedOutException:[xxx.xx.xx.xx / xxx.xx.xx.xx:9042]超时等待服务器响应

时间:2018-03-28 12:57:04

标签: cassandra cassandra-3.0 datastax-java-driver timeoutexception

我们正在Apache Cassandra-v3.0.9使用com.datastax.cassandra:cassandra-driver-core:3.1.3。我们的应用程序始终运行良好,但一周一次,我们开始从应用程序中获得以下异常:

com.datastax.driver.core.exceptions.OperationTimedOutException: [xxx.xx.xx.xx/xxx.xx.xx.xx:9042] Timed out waiting for server response
        at com.datastax.driver.core.exceptions.OperationTimedOutException.copy(OperationTimedOutException.java:44)
        at com.datastax.driver.core.exceptions.OperationTimedOutException.copy(OperationTimedOutException.java:26)
        at com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:37)
        at com.datastax.driver.core.ChainedResultSetFuture.getUninterruptibly(ChainedResultSetFuture.java:62)
        at com.datastax.driver.core.NewRelicChainedResultSetFuture.getUninterruptibly(NewRelicChainedResultSetFuture.java:11)
        at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:68)
        at com.til.cms.graphdao.cassandra.dao.generic.CassandraICMSGenericDaoImpl.getCmsEntityMapForLimitedSize(CassandraICMSGenericDaoImpl.java:2824)
        .....
Caused by: com.datastax.driver.core.exceptions.OperationTimedOutException: [xxx.xx.xx.xx/xxx.xx.xx.xx:9042] Timed out waiting for server response
        at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onTimeout(RequestHandler.java:770)
        at com.datastax.driver.core.Connection$ResponseHandler$1.run(Connection.java:1374)
        at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:581)
        at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:655)
        at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:367)
        at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:145)

这些应用程序正在访问Cassandra数据中心以获取读取请求。数据中心由5个物理服务器组成,每个服务器有2个磁盘,64 GB RAM,40个核心,16 GB堆栈,带有G1 GC。

根据我们的调查,Cassandra服务器没有问题,例如没有平均负载/ iowait增加,gc暂停或nodetool / cqlsh连接等。我们刚开始在应用程序日志中获取这些异常,直到我们重新启动Cassandra服务器。数据中心中的不同Cassandra服务器随机报告此异常,我们不得不重新启动它们。在正常时间,这些Cassandra服务器服务器中的每一个 10K读取请求/秒,并且几乎 10次写入请求/秒。当我们遇到此问题时,读取请求会显着影响到2-3 K /秒。

我们的cassandra数据中心的复制因子是3,以下是我们建立连接的方式

Cluster.builder()
    .addContactPoints(nodes)
    .withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_ONE))
    .withLoadBalancingPolicy(DCAwareRoundRobinPolicy.builder().withLocalDc(localDatacenter).build())
    .withSpeculativeExecutionPolicy(PerHostPercentileTracker.builder(13000).build())
    .build()

修改  我们在开始获取这些异常之前已经观察到,我们在java应用程序中获得了以下WARN级异常。

  

2018-04-03 23:40:06,456 WARN [cluster1-timeouter-0]   com.datastax.driver.core.RequestHandler [RequestHandler.java:805]不是   重试语句,因为它不是幂等的(此消息将是   只记录一次)。请注意,此版本的驱动程序会更改   非幂等语句的默认重试行为:它们不会成功   自动重试。驱动程序标记语句   默认情况下是非幂等的,所以你应该明确调用   setIdempotent(true)如果您的语句可以安全重试。看到   https://docs.datastax.com/en/developer/java-driver/3.1/manual/retries/了解更多详情。

     

2018-04-04 00:04:24,856 WARN [cluster1-nio-worker-2]   com.datastax.driver.core.PercentileTracker   [PercentileTracker.java:108]请求延迟为16632毫秒,   超过配置的最大可跟踪值13000

     

2018-04-04 00:04:24,858 WARN [cluster1-timeouter-0]   com.datastax.driver.core.PercentileTracker   [PercentileTracker.java:108]请求延迟为16712毫秒,   超过配置的最大可跟踪值13000

0 个答案:

没有答案