【问题标题】:Cassandra: too many sstables - node goes down instantlyCassandra:sstables 太多 - 节点立即关闭
【发布时间】:2017-01-30 16:07:29
【问题描述】:
  • 使用 Cassandra 2.2.8。

我的情况是为单个表创建了太多 SSTables (98,000+),而为其他 CF 创建了更多。 Node 不断崩溃,抱怨 jre 内存不足。我尝试将 linux nofile 限制增加到 200K 和 max_heap_size 到 16G,但无济于事!

寻求帮助以了解如何减少 SSTables 的数量(压缩?)并保持节点正常运行以进行维护。

提前致谢!

错误:

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

--------------- T H R E A D ---------------

当前线程 (0x00007efc78b83000):JavaThread "MemtableFlushWriter:2" 守护进程 [_thread_in_vm, id=22726, stack(0x00007efc48b61000,0x00007efc48ba2000)]

堆栈:[0x00007efc48b61000,0x00007efc48ba2000],sp=0x00007efc48b9f730,可用空间=249k 本机帧:(J=编译的 Java 代码,j=解释的,Vv=VM 代码,C=本机代码) V [libjvm.so+0xab97ea] VMError::report_and_die()+0x2ba V [libjvm.so+0x4f9dcb] 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(char*, unsigned long, unsigned long, bool)+0x29 V [libjvm.so+0x91502a] os::commit_memory(char*, unsigned long, unsigned long, bool)+0x2a

JRE 版本:Java(TM) SE 运行时环境 (8.0_65-b17)(内部版本 1.8.0_65-b17)

【问题讨论】:

  • 您是否更改了 cassandra.yml 中的压缩相关设置?
  • 您好,谢谢您提出我的问题。不,压实相关的设置不会改变;事实上,Cassandra.yaml 文件中根本没有进行任何更改。我可以看到初始化 C* 时,打开了数量巨大的 SSTabes!为 JVM 留下任何空间,结果导致 oom 错误关闭。我现在无法启动节点
  • 你能把你所有的错误和警告日志都写下来吗?

标签: cassandra


【解决方案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 相关信息并描述工作负载?

【讨论】:

  • 您好-感谢您在这里分享您的时间和经验。是否有可能/其他方式来处理这种情况,就像我想的那样,如果我们可以压缩 sstables - 将所有这些 SStables 移动到备份目录,但在 SSTable 的目录中保留很少,然后启动节点。一旦节点启动而不是压缩那几个 SSTables;一旦该过程完成,对其余的 SSTables 执行相同的操作,然后冲洗并重复!请分享这是否可行,或者您有更好的想法。我知道开发人员正在努力“修复代码”,尽管我仍然需要启动节点并摆脱这种情况
  • 也可以这样做...您可以将表删除到某个位置,然后在每次添加新内容时调用 nodetool refresh 来添加它们...但是您可能会得到很多数据没有找到 eceptions,这取决于您如何配置您的客户端...仲裁等。您使用的是什么压缩策略? (是时间窗口吗?)
  • 嗨,Marko.. 我们正在使用 STCS - 工作量很大
  • 您是使用 TTL 还是永久保存数据?
  • 我可以看到这个 CF 设置为@默认 TTL,我们可能也需要调整该值.. 我将向开发人员询问该问题
猜你喜欢
  • 2022-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多