2017-01-30 61 views
1
  • 使用卡桑德拉2.2.8。

我处于为单个表创建太多SSTables(98,000+)以及其他CF需要更多SSTable(98,000+)的情况。节点不断抱怨jre的内存不足。我试过增加linux nofile限制到200K和max_heap_size到16G,但无济于事!卡桑德拉:太多sstables - 节点出现故障瞬间

寻找帮助,知道如何为我怎样才能减少SSTables的#(压实?),并保持节点了这么去做保养。

提前致谢!

错误:

没有足够的内存让Java运行时环境继续运行。 内存不足错误(os_linux.cpp:2627),pid = 22667,tid = 139622017013504

--------------- THREAD ---------- -----

当前线程(0x00007efc78b83000):JavaThread “MemtableFlushWriter:2” 守护程序[_thread_in_vm,ID = 22726,叠层(0x00007efc48b61000,0x00007efc48ba2000)]

堆栈:[0x00007efc48b61000,0x00007efc48ba2000],SP =本地帧:(J =已编译的Java代码,j =已解释,Vv = VM代码,C =本机代码) V [libjvm.so + 0xab97ea] VMError :: report_and_die()+ 0x2ba V [libjvm.so + 0x4f 9dcb] report_vm_out_of_memory(char const *,int,unsigned long,VMErrorType,char const *)+ 0x8b V [libjvm.so + 0x91a7c3] os :: Linux :: commit_memory_impl(char *,unsigned long,bool)+ 0x103 V [libjvm.so + 0x91ad19] OS :: pd_commit_memory(字符*,无符号长,无符号长,布尔)+ 0x29 V [libjvm.so + 0x91502a] OS :: commit_memory(字符*,无符号长,无符号长,布尔) + 0x2a

JRE版本:爪哇(TM)SE运行时环境(8.0_65-B17)(建1.8.0_65-B17)

+0

您是否更改cassandra.yml中的压实相关设置? –

+0

您好,谢谢您采纳我的问题。不,压实相关的设置不会改变;事实上Cassandra.yaml文件中完全没有改变。我可以看到初始化C *时,SSTabes被打开,数量巨大!没有留下JVM的空间,因为结果会导致oom错误。 Iam现在无法启动节点 – Asad

+0

您能否把所有的错误和警告日志? –

回答

1

我会将此视为一个死节点情况:

https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsReplaceNode.html

https://docs.datastax.com/en/cassandra/2.1/cassandra/operations/opsReplaceNode.html

后完成的节点将有办法少sstables等是困扰我的是你怎么会到这种局面的事情的过程。你能否提供一些模式,插入,删除,ttl相关信息并描述工作量?

+0

你好 - 谢谢你在这里分享你的时间和经验。 是否有可能/其他方式来处理这种情况就像我在想,如果我们可以压缩sstables - 所有这些SStables移动到备份目录,但的SSTable的目录中保留一些,比开始的节点。 一旦节点比紧凑的那些少数SSTables;一旦这个过程完成,对于其余的SSTables在冲洗和重复之后也要这样做! 请分享,如果这将工作,或者你有更好的想法。 我知道开发人员正在努力'修复代码',尽管我仍然需要将节点启动并摆脱这种情况 – Asad

+0

也可以这样做......您可以将表格移除到某个位置,然后通过在每次添加新内容时调用nodetool刷新来添加它们......但是您可能会得到大量未找到的数据,具体取决于您如何配置客户端......仲裁等。您使用的是哪种压缩策略? (是时间窗口了吗?) –

+0

您好Marko ..我们正在使用STCS - 工作负载很重写 – Asad