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

问题描述 投票:2回答:1

我们将Apache Cassandra-v3.0.9com.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个内核,16GB堆以及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警告[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警告[cluster1-nio-worker-2]com.datastax.driver.core.PercentileTracker[PercentileTracker.java:108]得到了延迟为16632毫秒的请求,超过配置的最大可跟踪值13000

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

cassandra cassandra-3.0 datastax-java-driver timeoutexception
1个回答
0
投票

检查墓碑。太多的墓碑也会导致此。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.