Cassandra 1.2.x - RAM堆和JRE参数 - 用于更好理解的问题

时间:2013-05-31 18:29:38

标签: cassandra

我可以提出一些问题,以便更好地了解Cassandra和JRE以及RAM配置(参考V1.2.5和2013年5月的文档): 目前的文档和大量的谷歌研究仍然给我留下了一些未解决的问题。

有兴趣将它作为简单的嵌入式数据存储区用于分布在3个位置的6台计算机上的几百GB数据,这些计算机也运行java应用程序。

1)Cassandra的筹码大小

Windows .bat文件的默认设置为1GB,我认为这是一个错误,Linux cassandra-env.sh定义为180k。这是一个"只留下180k,火,忘记堆栈大小"事?

2)Cassandra的RAM使用

使用JNA时,系统RAM基本上分为3个主要区域:

  1. Cassandra使用指定的Java堆
  2. Cassandra使用由JNA
  3. 获得的exra RAM
  4. 操作系统使用RAM的剩余部分作为磁盘缓存
  5. 目前的文档基本上只建议:"不要将Java堆大小设置为高于8GB"

    • 这些信息是否仍然是最新的? (可能是这个陈述是从CMS 1.6垃圾收集器不包含在Java 1.6中的时间开始的)
    • 如何限制JNA堆(是' row_cache_size_in_mb'参数?)
    • Cassandra 1.2.x中专用系统上3个RAM区域(Java HEAP,JNA额外HEAP,OS CACHE)的良好布局经验是什么?
      • 有大量内存(128GB)?
      • 少量内存(4GB)?

    (我知道堆大小计算器,这个问题更多是理论上的理解和最新信息)

    3)Java Runtime

    为什么建议仍然使用Java 1.6而不是Java 1.7。

    • 这是"成熟度"运营建议?
    • 近期是否有特定的问题?
    • 或者只是等待一段时间,直到更多人报告1.7完美无瑕的操作?

    4)嵌入Cassandra

    " -XX:MaxTenuringThreshold = 1"在C * start脚本中有一个小小的暗示,将Cassandra与应用程序代码分开,应用程序代码通常在更高的阈值下生活得更好。另一方面," 1"可能也有点过时了 - 这个设置仍然很重要吗? (从现在开始使用CMS垃圾收集器和JNA-RAM,甚至可能使用Java1.7?)

1 个答案:

答案 0 :(得分:1)

1)你在看Xmx吗?我在cassandra.bat

中根本没有看到Xss

2)大致正确。 Cassandra实际上并不需要JNA进行堆外分配(1.0 IIRC)。

您不希望堆大于8GB,因为CMS和G1仍然会阻塞并最终导致STW暂停。简短说明:碎片化。更长:http://www.scribd.com/doc/37127094/GCTuningPresentationFISL10

Cassandra为行缓存和存储引擎元数据进行堆外分配。前者很容易调整;后者不是。基本上,每TB压缩数据需要大约20GB的ram,故事结束。您可以采取的减少内存使用的方法包括禁用压缩,降低布隆过滤器精度以及增加index_interval。所有这些都会降低你的表现,其他条件相同。

3)成熟度。我们是晚期采用者;我们这样的问题少了。 Cassandra 2.0将需要Java7。

4)这不是过时的。