写作

时间:2017-06-06 20:57:50

标签: memory cassandra jvm out-of-memory

我想知道为什么Cassandra在只写工作负载上内存不足。 它是单节点,版本3.10,具有默认配置(添加石墨报告器除外)。该机器具有30GB RAM,因此Cassandra以8GB堆启动。

我对Cassandra一无所知,但没有一个相关的指标看起来很可疑,而且我在堆转储中看不到任何明显的东西(只是很多字节数组都带有空间的书面数据)。 / p>

以下是可能相关的指标。请注意,堆使用量不断增加,很快该进程将因OOM而死亡: metrics

(GC时间内几秒钟的峰值无关紧要,我曾多次强制GC)

cassandra.yaml:https://gist.github.com/mabn/3b02fe94c819a9dddf3152bcecc00f24

1 个答案:

答案 0 :(得分:1)

为了使用超过8GB,你应该移动offheap memtables。这是一个重要的步骤,因为它将允许你使用更多的内存,但是将JVM坚持到8GB的上限,这样你就不会经历长时间的GC停止 - 世界停顿,这通常是在压力下大堆引发的。 / p>

您可以通过将memtable_allocation_typeheap_buffers更改为offheap_buffersoffheap_objects之一来移动记事本,每个人都有自己的理由。然后,将memtable_offheap_space_in_mb调整为系统的合理值。

此外,移动memtables可以释放堆中可用于键/行缓存的空间,从而提高读取性能。

看看这些文章: