为什么我的Cassandra节点因MutationStage增加而卡住?

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

我正在使用Cassandra存储图片。目前,我们正在从旧系统中大规模迁移图片。一切都运行了一会儿,但是最终我在保存时会得到TimedOutException,我认为这是因为工作队列已满。

但是,等待(几个小时)完成后,情况仍然一样(停止迁移后无法恢复自身)

似乎只有一个节点有问题,其tpstats命令在其上显示以下数据

“

即使我们在几个小时前停止了插入,挂起的MutationStage操作仍在增加。

这到底是什么意思?什么是MutationStage?

我可以检查一下为什么这么长时间后仍不稳定?环中的所有其他服务器处于0个待处理操作。

我们尝试插入的任何新插入都会引发TimedOutException ...异常。

这是有用的铃声信息

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS94QUtYMi5wbmcifQ==” alt =“在此处输入图像描述”>(有问题的节点是第一个)

EDIT:日志的最后几行如下

INFO [OptionalTasks:1] 2013-02-05 10:12:59,140 MeteredFlusher.java (line 62) flushing high-traffic column family CFS(Keyspace='pics_persistent', ColumnFamily='master') (estimated 92972117 bytes)  
INFO [OptionalTasks:1] 2013-02-05 10:12:59,141 ColumnFamilyStore.java (line 643) Enqueuing flush of Memtable-master@916497516(74377694/92972117 serialized/live bytes, 141 ops)
INFO [OptionalTasks:1] 2013-02-05 10:14:49,205 MeteredFlusher.java (line 62) flushing high-traffic column family CFS(Keyspace='pics_persistent', ColumnFamily='master') (estimated 80689206 bytes)
INFO [OptionalTasks:1] 2013-02-05 10:14:49,207 ColumnFamilyStore.java (line 643) Enqueuing flush of Memtable-master@800272493(64551365/80689206 serialized/live bytes, 113 ops)
WARN [MemoryMeter:1] 2013-02-05 10:16:10,662 Memtable.java (line 197) setting live ratio to minimum of 1.0 instead of 0.0015255633589225548
INFO [MemoryMeter:1] 2013-02-05 10:16:10,663 Memtable.java (line 213) CFS(Keyspace='pics_persistent', ColumnFamily='master') liveRatio is 1.0 (just-counted was 1.0).  calculation took 38ms for 86 columns
INFO [OptionalTasks:1] 2013-02-05 10:16:33,267 MeteredFlusher.java (line 62) flushing high-traffic column family CFS(Keyspace='pics_persistent', ColumnFamily='master') (estimated 71029403 bytes)
INFO [OptionalTasks:1] 2013-02-05 10:16:33,269 ColumnFamilyStore.java (line 643) Enqueuing flush of Memtable-master@143498560(56823523/71029403 serialized/live bytes, 108 ops)
INFO [ScheduledTasks:1] 2013-02-05 11:36:27,798 GCInspector.java (line 122) GC for ParNew: 243 ms for 1 collections, 1917768456 used; max is 3107979264
INFO [ScheduledTasks:1] 2013-02-05 13:00:54,090 GCInspector.java (line 122) GC for ParNew: 327 ms for 1 collections, 1966976760 used; max is 3107979264
java performance optimization cassandra deadlock
1个回答
2
投票

[我猜您只是通过写操作使一个节点超载-即,您写的速度快于其消化能力。如果您的文章很大,这很容易。

即使您停止写入群集后,MutationStage仍在增加,因为其他节点仍在处理排队的变异请求,并且将副本发送到此过载的节点

我不知道为什么其中一个节点过载,因为可能有多种原因:

  • 该节点比其他节点慢(不同的硬件或不同的配置)
  • 集群未正确平衡(但是,nodetool环输出的开头表明情况并非如此)
  • 您将所有写入均定向到该特定节点,而不是将它们平均分配给所有节点,例如通过循环
  • 您配置了太大的总memtables大小限制/或缓存大小,而总堆空间却太少,并且您的节点在GC方面苦苦挣扎,而这恰好是第一个陷入GC死亡螺旋的人]
© www.soinside.com 2019 - 2024. All rights reserved.