我们有一个cassandra集群,在aws上使用ec2snitch有3个节点和复制因子3。
示例类型为c5.2xlarge(8核16gb ram)。
集群一直运行良好,但从昨天晚上开始,所有节点上的cassandra进程突然崩溃。它们被设置为自动重新启动,但在启动后的1、2或3分钟内,由于内存堆空间不足而崩溃。
堆配置:
MAX_HEAP_SIZE="4G"
HEAP_NEWSIZE="800M"
在此之后,我们尝试将节点大小增加到r5.4x或128gb内存,并分配64gb堆,但仍然会发生相同的情况,不管所有3个节点是否启动,或者一次只启动一个节点。我们可以注意到,第一次垃圾收集发生在一段时间之后,然后在几秒钟内连续发生,无法释放更多内存,最终崩溃。
我们不确定什么东西在启动后立即被拉到内存中。
其他参数:
Cassandra版本:2.2.13
数据库大小为250gb hinted_handoff_enabled: true
commitlog_segment_size_in_mb: 64 memtable_allocation_type: offheap_buffers
如有任何帮助,将不胜感激。
编辑:我们发现在查询时有一个特定的表,它会导致casssandra节点崩溃。
cqlsh:my_keyspace> select count(*) from my_table ;
ReadTimeout: Error from server: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}
所以我们认为,这与这个特定表中的数据被破坏/庞大有关。谢谢。
2条答案
按热度按时间w7t8yxp51#
除了@aaron的cg和内存调整建议之外,您还应该检查您是否对数据使用了正确的压缩策略。
https://docs.datastax.com/en/dse/5.1/dse-dev/datastax_enterprise/config/configchoosecompactstrategy.html#whichcompactionstrategyisbest
您还应该检查损坏的sstables,因为尝试获取损坏的数据也将以相同的方式显示(例如https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/tools/toolsscrub.html)
rwqw0loc2#
一些快速观察:
如果要构建新群集,请使用最新的3.11.x版本。没有必要在2.2上构建新的。
根据您的设置,看起来您正在使用cms gc。如果您不太熟悉gc调优,那么可以通过切换到g1而不指定
HEAP_NEWSIZE
(g1自己计算出eden的大小)。如果你被卡在cms上,设置指南
HEAP_NEWSIZE
在100Mbx核上,这是错误的。要避免新->旧代升级,请设置HEAP_NEWSIZE
总堆大小的40%-50%并增加MaxTenuringThreshold
大约6-8岁。在带有cmsgc的16gbram机器上,我将使用8gbheap,并翻转
memtable_allocation_type: offheap_buffers
回到heap_buffers
.套
commitlog_segment_size_in_mb
回到32岁。通常,当人们需要处理这个问题时,就应该降低它,除非你也改变了max_mutation_size_in_kb
.您还没有提到崩溃发生时应用程序在做什么。我怀疑正在发生写重负载。在这种情况下,您可能需要3个以上的节点,或者在应用程序端查看限制正在进行的写操作数的速率。
帮助您的其他信息:
cassandra-8150—cassandra committer关于良好jvm设置的讨论。
amy的cassandra2.1调优指南-amy tobey的管理指南在集群配置的良好默认设置方面有很多智慧。
编辑
我们使用的是g1 gc。
这是非常非常重要的,你不要设置一个新的堆大小(
Xmn
)与g1。一定要把它注解掉。从我的表中选择count(*);
是,未绑定查询(没有
WHERE
从句`)绝对会对节点施加过度的压力。尤其是table很大的时候。这些类型的查询是cassandra不擅长的。想办法使用/需要这个结果。您可以通过将分页大小设置得更小(驱动端),或者使用类似spark的方法来实现这一点。或者通过令牌范围进行查询,并在应用程序端对结果进行合计。但你最好不要这样做。