我可以问一些问题,以更好地了解 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 个主要区域:
- Cassandra 使用分配的 Java 堆
- Cassandra 使用 JNA 获得的 exra RAM
- 操作系统使用剩余的 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?)