我们尝试了一下与卡桑德拉最近(1.0.7版本),我们似乎有一些问题的内存。我们使用EC2作为测试环境,我们有三个节点,内存3.7G,核心2.4G,全部运行Ubuntu 11.10。卡桑德拉运行内存(堆空间)
的问题是,我们从旧货接口击中节点定期死亡(约后,我们存储数据的2-2.5G)。错误消息:OutOfMemoryError:Java堆空间并根据日志实际上使用了所有分配的内存。
的节点是相对恒定的载荷下和存储关于2000-4000行键一分钟,这是通过在10-30行键的TRIFT接口一次分批(每个约50列)。读取次数非常低,每天约1000-2000次,只需要一个单一行密钥的数据。目前只有一个使用过的列族。
最初的想法是cassandra-env.sh文件中出现错误。所以,我们根据节点的规范指定了变量'system_memory_in_mb'(3760)和'system_cpu_cores'(1)。我们还将'MAX_HEAP_SIZE'更改为2G,将'HEAP_NEWSIZE'更改为200M(我们认为第二个与垃圾收集相关)。不幸的是,这并没有解决问题,我们通过节俭击中的节点不断定期死亡。
如果你觉得这个有用,交换关闭,所有3台服务器上的不可修复内存似乎非常高(2.3GB,我们通常会观察其他Linux服务器上的不可修复内存量约为0-16KB)不太清楚不可预测的记忆如何与Cassandra联系起来,它只是我们在观察问题时观察到的)。 CPU在整个时间都非常空闲。随着时间的推移,堆内存显然会逐渐减少,但显然随着时间的推移而增长。
任何想法?提前致谢。
你在运行什么版本的Cassandra?另外,您可以将其发布到Cassandra用户列表中,因为它是获得有关此类事情建议的非常活跃的地方。 – dmcnelis 2012-04-03 14:25:59
感谢您的评论。它是1.0.7。我更新了问题以显示我们正在运行的Cassandra的版本。我也将搜索Cassandra用户列表。谢谢。 – Bill 2012-04-04 12:06:09
你是否启用缓存?行缓存可以真正杀死你的内存。另外,您是否手动指定提交日志阈值或更改cassandra.yaml中的任何内存内容? – Zanson 2012-04-09 23:47:42