2

我可以问一些问题,以更好地了解 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 获得的 exra RAM
  3. 操作系统使用剩余的 RAM 作为磁盘缓存

当前文档基本上只建议:“不要将 Java 堆大小设置为高于 8GB”

  • 这些信息是否仍然是最新的?(这句话可能来自 CMS 垃圾收集器未包含在 Java 1.6 中的时间)
  • 如何限制 JNA 堆(是 'row_cache_size_in_mb' 参数吗?)
  • Cassandra 1.2.x 专用系统上的 3 个 RAM 区域(Java HEAP、JNA extra HEAP、OS CACHE)的良好布局经验法则是什么?
    • 当有大量 RAM (128GB) 时?
    • 当内存很少(4GB)时?

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

3) Java 运行时

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

  • 这是一个“成熟”的操作建议吗?
  • 是否有近期已知的具体问题?
  • 或者只是等待更多的人报告 1.7 的完美运行?

4) 嵌入 Cassandra

C* 启动脚本中的“-XX:MaxTenuringThreshold=1”是一个将 Cassandra 与应用程序代码分开的轻微提示,通常在较高的阈值下效果更好。另一方面,“1”也可能有点过时了——这个设置还那么重要吗?(因为现在使用 CMS 垃圾收集器和 JNA-RAM,甚至可能使用 Java1.7?)

4

1 回答 1

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 的内存,故事结束。您可以采取的措施来减少内存使用量包括禁用压缩、降低布隆过滤器精度和增加 index_interval。在其他条件相同的情况下,所有这些都会降低你的表现。

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

4) 这并不过时。

于 2013-05-31T20:14:52.283 回答