我想知道为什么Cassandra在只写工作负载上内存不足。 它是单节点,版本3.10,具有默认配置(添加石墨报告器除外)。该机器具有30GB RAM,因此Cassandra以8GB堆启动。
我对Cassandra一无所知,但没有一个相关的指标看起来很可疑,而且我在堆转储中看不到任何明显的东西(只是很多字节数组都带有空间的书面数据)。 / p>
以下是可能相关的指标。请注意,堆使用量不断增加,很快该进程将因OOM而死亡:
(GC时间内几秒钟的峰值无关紧要,我曾多次强制GC)
cassandra.yaml:https://gist.github.com/mabn/3b02fe94c819a9dddf3152bcecc00f24
答案 0 :(得分:1)
为了使用超过8GB,你应该移动offheap memtables。这是一个重要的步骤,因为它将允许你使用更多的内存,但是将JVM坚持到8GB的上限,这样你就不会经历长时间的GC停止 - 世界停顿,这通常是在压力下大堆引发的。 / p>
您可以通过将memtable_allocation_type
从heap_buffers
更改为offheap_buffers
或offheap_objects
之一来移动记事本,每个人都有自己的理由。然后,将memtable_offheap_space_in_mb
调整为系统的合理值。
此外,移动memtables可以释放堆中可用于键/行缓存的空间,从而提高读取性能。
看看这些文章: