1

WARN [ScheduledTasks:1] 2013-11-04 22:51:06,619 GCInspector.java(第 142 行)堆已满 0.892615008651467。您可能需要减少 memtable 和/或缓存大小。Cassandra 现在将刷新到两个最大的内存表以释放内存。如果您不希望 Cassandra 自动执行此操作,请调整 cassandra.yaml 中的 flush_largest_memtables_at 阈值

WARN [ScheduledTasks:1] 2013-11-04 22:51:06,633 StorageService.java (line 360​​0) 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 行)线程中的异常

线程 [Thrift:46,5,main] java.lang.OutOfMemoryError: java.util.Arrays.copyOf(Unknown Source) at java.io.ByteArrayOutputStream.write(Unknown Source) at org.apache.thrift 的 Java 堆空间。 org.apache.cassandra.thrift.TBinaryProtocol.writeBinary(TBinaryProtocol.java: 73) 在 org.apache.cassandra.thrift.ColumnOrSuperColumn.write(ColumnOrSuperColumn.java:554) 在 org.apache.cassandra.thrift.Cassandra 的 org.apache.cassandra.thrift.Column.write(Column.java:579) $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(Unknown Source) 在 java.util.concurrent.ThreadPoolExecutor$Worker。在 java.lang.Thread.run(Unknown Source) INFO [FlushWriter:20] 2013-11-04 22:51:06,635 Memtable.java (line 495) 处运行(Unknown Source) 已完成刷新 /data/OpsCenter/rollups60/OpsCenter -rollups60-ic-889-Data.db (519 字节) 用于提交日志位置 ReplayPosition(segmentId=1383597360912, position=10472305)运行(未知来源)INFO [FlushWriter:20] 2013-11-04 22:51:06,635 Memtable.java(第 495 行)已完成刷新 /data/OpsCenter/rollups60/OpsCenter-rollups60-ic-889-Data.db (519 bytes) 用于提交日志位置 ReplayPosition(segmentId=1383597360912, position=10472305)运行(未知来源)INFO [FlushWriter:20] 2013-11-04 22:51:06,635 Memtable.java(第 495 行)已完成刷新 /data/OpsCenter/rollups60/OpsCenter-rollups60-ic-889-Data.db (519 bytes) 用于提交日志位置 ReplayPosition(segmentId=1383597360912, position=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 行)宣布关闭

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

4

1 回答 1

2

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

然而,话虽如此,很多事情都可能导致高内存消耗,包括:

  • 布隆过滤器大小(在 C* 2.0 及更高版本中移出堆)
  • 密钥缓存
  • 行缓存(如果打开)
  • 内存表大小(或不经常刷新内存表)
于 2013-11-18T19:01:47.173 回答