当前位置: 首页 > 知识库问答 >
问题:

卡桑德拉节点因 Java 堆错误而关闭

江新
2023-03-14

WARN[scheduled tasks:1]2013-11-04 22:51:06,619 GCInspector.java(第142行)堆已满0.892615008651467。您可能需要减小内存表和/或缓存的大小。Cassandra现在将刷新两个最大的memtables来释放内存。如果不希望cassandra自动执行此操作,请在cassandra.yaml中调整flush _ largest _ mem tables _ at threshold

警告[计划任务:1]2013-11-04 22:51:06633 StorageService。java(第3600行)刷新CFS(Keyspace='OpsCenter',ColumnFamily='rollups60')以缓解内存压力INFO〔ScheduledTasks:1〕2013-11-04 22:51:06634 ColumnFamilyStore。java(第630行)排队刷新Memtable-rollups60@573393486(240/4340个串行/实时字节,15个操作)

错误[Thrift: 46] 2013-11-04 22:51:06,621CassandraDaemon.java(第192行)线程异常

Thread[节俭:46,5,main] java.lang.OutOfMemoryError: Java 堆空间在 java.util.Arrays.copyOf(未知来源) 在 java.io.字节数组输出流.write(未知来源) 在 org..java apache.thrift.transport.TFramedTransport.write(TFramedTransport.java:146) 在 com.datastax.bdp.transport.server.TNegotingServerTransport.write(TNegotiingServerTransportsport.write(TNegotingServerTransport.java:390) 在专栏.java:579) 在 org.apache.卡桑德拉.java:579) 在 org.apache.cassandra.thrift.column 或超级列.java:554) 在 org.apache.cassandra.thrift.cassandra$get_slice_result.write(卡桑德拉.java:7900) 在 org.apache.thrift.processFunction.process(ProcessFunction.java:34) 在组织.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34) 在 org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:201) 在 java.util.concurrent.线程池加速器$Worker.run任务(未知来源) 在 java.util.concurrent.线程缓存器$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源) 信息 [刷新编写器:20] 2013-11-04 22:51:06,635 Memtable.java(第 495 行) 完成刷新 /数据/操作中心/汇总60/运维中心汇总60-ic-889-数据.db(519 字节)用于提交日志位置重放位置(段 Id=1383597360912,位置=10472305)

INFO [刷新作家:20] 2013-11-04 22:51:06,639 可记忆.java (第461行) 写入可记忆rollups300@1479174915(288/5560 序列化/实时字节,12 操作)

Server.java(第160行)停止监听CQL客户端信息

当压缩在我的节点上时,我的节点就会死亡。我已经max_heap_size 8G,但仍然不知道如何配置我的堆大小。

共有1个答案

司马俊晖
2023-03-14

问题可能是缓存了太多的预准备语句(已在1.2.11中解决),请查看CASSANDRA-6107。对于可以存储的准备好的语句的数量有一个硬编码限制,但是如果语句本身很大并且足够多的语句被缓存,这将导致很高的内存消耗,并且由于语句被存储在缓存中并且从未从所述缓存中被驱逐,所以GC不会清除它们。修复方法是使缓存限制为总可用内存的百分比,并避免缓存超过最大阈值的预准备语句。

然而,说到这里,许多事情都可能导致高内存消耗,包括:

    < li >布隆过滤器大小(在C* 2.0和更高版本中从堆中移出) < li >密钥缓存 < li >行缓存(如果打开) < li >内存表大小(或者刷新内存表的频率不够)
 类似资料:
  • 我正在使用Cassandra作为我的一个应用程序。我想使用Cassandra通过cql提供的Prepared语句。如果我准备了一个查询,这是否在所有节点中都准备好了?。 任何帮助是值得赞赏的。

  • 我使用的是spring数据cassandra,需要使用jpa映射一个字段,在cassandra中,该字段的类型为

  • 我们运行的cassandra集群有3个节点,复制因子为2。 我们的nodejs服务器是查询这个集群的唯一地方。 是否有其他任何地方的参数设置可能导致不一致的查询? cassandra v2.2.4 nodejs驱动程序v3.0.0 编辑-添加我正在做的事情的示例: 1)检查用户名是否被占用 2)创建用户

  • 我们一直在使用Spark RDD API(Spark 2.0)来处理在Cassandra.Note中建模的数据,这些数据在Cassandra中建模以实现高效的读写。 然而,现在还有SparkSQLAPI,Spark DataFrame API,它也是一种替代的数据访问方法-http://spark.apache.org/docs/latest/sql-programming-guide.html

  • Cassandra节点由于OOM而关闭,并检查我在下面看到的 /var/log/message。 除了带有搜索和监视代理的dse cassandra之外,此主机上没有其他运行程序。最大堆大小设置为31g,出错时cassandra java进程似乎使用了约57gb(ram为62gb)。所以我猜想jvm开始使用大量内存并触发oom错误。我的理解正确吗?这是linux触发的jvm杀死,因为jvm消耗的内

  • 我用Spring Data Cassandra 2.2.1开发了一个新的应用程序,想在Cassandra 2.1.9服务器上运行它(旧的,我知道)。但是我们得到了错误 Spring数据卡桑德拉手册声称Spring数据2.2.1至少需要卡桑德拉2.1,所以这应该有效,但它没有。我们包含的唯一特定于卡桑德拉的依赖项是 我怎样才能让这个工作?