2013-11-05 67 views
1

WARN [ScheduledTasks:1] 2013-11-04 22:51:06,619 GCInspector.java (line 142) Heap is 0.892615008651467 full. You may need to reduce memtable and/or cache sizes. Cassandra will now flush up to the two largest memtables to free up memory. Adjust flush_largest_memtables_at threshold in cassandra.yaml if you don't want Cassandra to do this automaticallyCassandra节点出现java堆错误

WARN [ScheduledTasks:1] 2013-11-04 22:51:06,633 StorageService.java (line 3600) Flushing CFS(Keyspace='OpsCenter', ColumnFamily='rollups60') to relieve memory pressure INFO [ScheduledTasks:1] 2013-11-04 22:51:06,634 ColumnFamilyStore.java (line 630) Enqueuing flush of [email protected](240/4340 serialized/live bytes, 15 ops)

ERROR [Thrift:46] 2013-11-04 22:51:06,621 CassandraDaemon.java (line 192) Exception in thread

Thread[Thrift:46,5,main] java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.io.ByteArrayOutputStream.write(Unknown Source) at org.apache.thrift.transport.TFramedTransport.write(TFramedTransport.java:146) at com.datastax.bdp.transport.server.TNegotiatingServerTransport.write(TNegotiatingServerTransport.java:390) at org.apache.cassandra.thrift.TBinaryProtocol.writeBinary(TBinaryProtocol.java:73) at org.apache.cassandra.thrift.Column.write(Column.java:579) at org.apache.cassandra.thrift.ColumnOrSuperColumn.write(ColumnOrSuperColumn.java:554) at org.apache.cassandra.thrift.Cassandra$get_slice_result.write(Cassandra.java:7900) at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:34) at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34) at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:201) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) INFO [FlushWriter:20] 2013-11-04 22:51:06,635 Memtable.java (line 495) Completed flushing /data/OpsCenter/rollups60/OpsCenter-rollups60-ic-889-Data.db (519 bytes) for commitlog position ReplayPosition(segmentId=1383597360912, position=10472305)

INFO [FlushWriter:20] 2013-11-04 22:51:06,639 Memtable.java (line 461) Writing [email protected](288/5560 serialized/live bytes, 12 ops)

INFO [StorageServiceShutdownHook] 2013-11-04 22:51:06,683 Server.java (line 160) Stop listening for CQL clients INFO [StorageServiceShutdownHook] 2013-11-04 22:51:06,684 Gossiper.java (line 1108) Announcing shutdown

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

+0

的内存(RAM)如何在机器C *为r有没有当你启动cassandra什么是'-Xmx'设置? (您可以通过在前台简单地启动cassandra并检查参数来找到)。 –

+0

我发现这个用ps命令:-Xms8059M -Xmx8059M -Xmn400M -XX:+ HeapDumpOnOutOfMemoryError -Xss180k - – Ram

+0

自由-mt 总使用的无共享缓冲器缓存 号负责:32238 16487 15750 0 429 6112 -/+缓冲器/高速缓存: 9945 22293 交换:511 0 511 合计:32750 16487 16262 – Ram

回答

1

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

然而,他说,之后,许多事情可能会导致较高的内存消耗包括:

  • 布隆过滤器(S)的大小(移出用C堆* 2.0及更高版本)
  • 键缓存
  • 行高速缓存(如果开启)
  • 的memTable大小(或不冲水memtables frequrently足够)