CounterMutationStage中的Cassandra WriteTimeoutException异常-节点最终死亡

CounterMutationStage中的Cassandra WriteTimeoutException异常-节点最终死亡,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我的cassandra system.log中出现以下异常: WARN [CounterMutationStage-25] 2017-07-25 13:25:35,874 AbstractLocalAwareExecutorService.java:169 - Uncaught exception on thread Thread[CounterMutationStage-25,5,main]: {} java.lang.RuntimeException: org.apache.cassand

我的cassandra system.log中出现以下异常:

WARN  [CounterMutationStage-25] 2017-07-25 13:25:35,874 AbstractLocalAwareExecutorService.java:169 - Uncaught exception on thread Thread[CounterMutationStage-25,5,main]: {}
java.lang.RuntimeException: org.apache.cassandra.exceptions.WriteTimeoutException: Operation timed out - received only 0 responses.
    at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:2490) ~[apache-cassandra-3.9.jar:3.9]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[na:1.8.0_112]
    at org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$FutureTask.run(AbstractLocalAwareExecutorService.java:164) ~[apache-cassandra-3.9.jar:3.9]
    at org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$LocalSessionFutureTask.run(AbstractLocalAwareExecutorService.java:136) [apache-cassandra-3.9.jar:3.9]
    at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:109) [apache-cassandra-3.9.jar:3.9]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_112]
Caused by: org.apache.cassandra.exceptions.WriteTimeoutException: Operation timed out - received only 0 responses.
    at org.apache.cassandra.db.CounterMutation.grabCounterLocks(CounterMutation.java:150) ~[apache-cassandra-3.9.jar:3.9]
    at org.apache.cassandra.db.CounterMutation.applyCounterMutation(CounterMutation.java:122) ~[apache-cassandra-3.9.jar:3.9]
    at org.apache.cassandra.service.StorageProxy$9.runMayThrow(StorageProxy.java:1473) ~[apache-cassandra-3.9.jar:3.9]
    at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:2486) ~[apache-cassandra-3.9.jar:3.9]
    ... 5 common frames omitted
每当这种情况发生时,CPU将下降到0%大约一分钟,节点将变得无响应,但之后会恢复。 但最终,节点将完全消亡,即进程继续运行,但不再响应命令,即使关机不起作用,也必须终止进程

更多信息:

卡桑德拉3.9 G1垃圾收集器 Windows Server 2012 R2 20核256 GB RAM上的单节点 使用大量计数器和计数器突变 我尝试过的事情:

从日志中删除所有其他警告。用于警告计数器批太大,重写代码以完全不使用批处理。这消除了警告,但没有消除异常问题。 迁移到更大的机器上,使用更大的堆和微调的GC来确保问题不是机器压力过大。CPU负载<20%。 有人知道还能做什么吗?我主要关心的是节点完全死亡。我不确定这个异常是否是导致它的原因,但这是我得到的唯一提示

更新1:

更新到Cassandra 3.11,节点似乎不再死亡。然而,写入超时表明,节点在几分钟内没有响应,但至少现在恢复了

更新2:

在专业顾问的帮助下解决了这个问题。我们节点上的磁盘I/O速度非常糟糕,导致刷新写入程序的队列不断增加。原因不明,驱动器Raid 1 SSD上的I/O速度测试实际上非常好。 将节点从Windows移动到Linux并根据配置解决了问题


问题的真正原因尚不清楚;可能是Windows本身,或者只是与RAID设置不兼容。在任何情况下,Cassandra都只在Linux上进行过真正的测试,要找到Linux安装的帮助要容易得多。吸取的教训。

这听起来像一台有20个内核和256GB内存的健壮机器。Cassandra是一个分布式系统,旨在横向扩展。不要将负载推到单个节点上,而是尝试添加更多商品硬件并水平扩展。您还可以在同一个框中运行Cassandra的多个节点

至少尝试在此框中运行几个节点,以从无响应状态进行缩放。大多数情况下,CPU不是卡桑德拉的瓶颈。它是单个节点可以执行的I/O

检查cassandra.yaml中并发_写入的值,我猜根据20核的建议,它将是160 20*8。 如果可行,请尝试分离commitlog目录和数据目录存储驱动器。 扩展写操作的最佳选择是添加更多配置中可能更小的框。
我会接受这个答案,因为问题实际上是磁盘I/O,您的建议非常正确,尽管它没有解决我们的具体问题。