Cassandra节点因java堆错误而关闭

时间:2013-11-05 01:42:23

标签: cassandra datastax-enterprise datastax

  

WARN [ScheduledTasks:1] 2013-11-04 22:51:06,619 GCInspector.java(行   142)堆是0.892615008651467满。您可能需要减少记忆   和/或缓存大小。卡桑德拉现在将冲到最大的两个   记忆释放记忆。调整flush_largest_memtables_at   cassandra.yaml中的阈值,如果你不想让Cassandra这样做的话   自动

     

WARN [ScheduledTasks:1] 2013-11-04 22:51:06,633   StorageService.java(第3600行)Flushing CFS(Keyspace ='OpsCenter',   ColumnFamily ='rollups60')以缓解内存压力INFO   [ScheduledTasks:1] 2013-11-04 22:51:06,634 ColumnFamilyStore.java   (第630行)排队等待Memtable-rollups60 @ 573393486(240/4340   序列化/活字节,15个操作)

     

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

     

Thread [Thrift:46,5,main] java.lang.OutOfMemoryError:Java堆空间     在java.util.Arrays.copyOf(未知来源)at   java.io.ByteArrayOutputStream.write(未知来源)at   org.apache.thrift.transport.TFramedTransport.write(TFramedTransport.java:146)     在   com.datastax.bdp.transport.server.TNegotiatingServerTransport.write(TNegotiatingServerTransport.java:390)     在   org.apache.cassandra.thrift.TBinaryProtocol.writeBinary(TBinaryProtocol.java:73)     在org.apache.cassandra.thrift.Column.write(Column.java:579)at at   org.apache.cassandra.thrift.ColumnOrSuperColumn.write(ColumnOrSuperColumn.java:554)     在   org.apache.cassandra.thrift.Cassandra $ get_slice_result.write(Cassandra.java:7900)     在org.apache.thrift.ProcessFunction.process(ProcessFunction.java:34)     在org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)     在   org.apache.cassandra.thrift.CustomTThreadPoolServer $ WorkerProcess.run(CustomTThreadPoolServer.java:201)     在java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(未知   来自java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知   来自)java.lang.Thread.run(未知来源)INFO   [FlushWriter:20] 2013-11-04 22:51:06,635 Memtable.java(第495行)   完成冲洗   /data/OpsCenter/rollups60/OpsCenter-rollups60-ic-889-Data.db(519   对于commitlog位置ReplayPosition(segmentId = 1383597360912,   位置= 10472305)

     

INFO [FlushWriter:20] 2013-11-04 22:51:06,639   Memtable.java(第461行)写作   Memtable-rollups300 @ 1479174915(288/5560序列化/实时字节,12个操作)

     

INFO [StorageServiceShutdownHook] 2013-11-04 22:51:06,683 Server.java   (第160行)停止侦听CQL客户端INFO   [StorageServiceShutdownHook] 2013-11-04 22:51:06,684 Gossiper.java   (第1108行)宣布关闭

当压缩进行时,我的节点就会死掉。我有8G的max_heap_size,但我仍然不知道如何配置我的堆大小。

1 个答案:

答案 0 :(得分:2)

问题可能是缓存的预处理语句太多(在1.2.11中解决),查看CASSANDRA-6107。对于可以存储的预准备语句的数量存在硬编码限制,但是如果语句本身很大并且足够的它们被缓存,则会导致高内存消耗,并且因为语句存储在缓存中并且从未被逐出说缓存GC不会摆脱它们。修复方法是使缓存的限制为总可用内存的百分比,并避免缓存超出最大阈值的预准备语句。

然而,在说完之后,许多事情可能导致高内存消耗,包括:

  • Bloom filter(s)size(在C * 2.0及更高版本中移出堆)
  • 密钥缓存
  • 行缓存(如果已启用)
  • 可记忆的大小(或者没有足够的刷新记忆)