1

我正在运行 Cassandra 1.0.7,5 个节点,每个节点有 8GB 物理 RAM,我的堆是 4GB。我经常开始遇到这样的节点故障:

 WARN [ScheduledTasks:1] 2013-04-10 10:18:12,042 GCInspector.java (line 145) Heap is 0.9602098156121341 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 automatically


 WARN [ScheduledTasks:1] 2013-04-10 10:18:12,042 StorageService.java (line 2645) Flushing CFS(Keyspace='Company', ColumnFamily='01_Meta') to relieve memory pressure

 WARN [ScheduledTasks:1] 2013-04-10 10:18:14,403 GCInspector.java (line 145) Heap is 0.9610030442856479 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 automatically

 WARN [ScheduledTasks:1] 2013-04-10 10:18:14,403 StorageService.java (line 2645) Flushing CFS(Keyspace='Company', ColumnFamily='01_Meta') to relieve memory pressure

ERROR [MutationStage:23969] 2013-04-10 10:18:18,339 AbstractCassandraDaemon.java (line 139) Fatal exception in thread Thread[MutationStage:23969,5,main]
java.lang.OutOfMemoryError: Java heap space
    at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:39)
    at java.nio.ByteBuffer.allocate(ByteBuffer.java:312)
    at org.apache.cassandra.utils.SlabAllocator.allocate(SlabAllocator.java:68)
    at org.apache.cassandra.utils.Allocator.clone(Allocator.java:32)
    at org.apache.cassandra.db.Column.localCopy(Column.java:244)
    at org.apache.cassandra.db.Memtable.resolve(Memtable.java:215)
    at org.apache.cassandra.db.Memtable.put(Memtable.java:143)
    at org.apache.cassandra.db.ColumnFamilyStore.apply(ColumnFamilyStore.java:805)
    at org.apache.cassandra.db.Table.apply(Table.java:431)
    at org.apache.cassandra.db.RowMutation.apply(RowMutation.java:256)
    at org.apache.cassandra.service.StorageProxy$6.runMayThrow(StorageProxy.java:416)
    at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1223)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

启动参数为:

/usr/lib/jvm/jdk1.6.0_31/bin/java
-ea
-javaagent:/usr/share/cassandra//lib/jamm-0.2.5.jar
-XX:+UseThreadPriorities
-XX:ThreadPriorityPolicy=42
-Xms4G
-Xmx4G   heap size
-Xmn200M
-XX:+HeapDumpOnOutOfMemoryError
-Xss128k
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=1
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-Djava.net.preferIPv4Stack=true
-Dcom.sun.management.jmxremote.port=7199
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dlog4j.configuration=log4j-server.properties
-Dlog4j.defaultInitOverride=true
-Dcassandra-pidfile=/var/run/cassandra/cassandra.pid
-cp /etc/cassandra/conf:/usr/share/cassandra/lib/antlr-

关于从哪里开始的任何想法?我在看这里: http ://www.datastax.com/docs/1.0/operations/tuning#tuning-options-for-size-tiered-compaction http://www.datastax.com/docs/1.0/operations/调整#tuning-java-heap-size

但到目前为止,似乎没有什么不寻常的。任何建议都非常感谢。

4

1 回答 1

3

Cassandra 在 8GB 机器上的 4GB 堆似乎相当高,您正在从内核缓存中取出 RAM 并增加 GC 的暂停时间。我希望堆更像2GB。

事实上,如果您偏离了 cassandra-env.sh 中的任何 JVM 设置,并且您没有 100% 准确地理解您所做更改的含义,那么您已经陷入了麻烦之中。如果您在没有将所有内容从 JVM 和 Cassandra 中绘制出来的情况下执行此操作,那么您将获得更多。

不仅如此,如果没有大量信息,几乎不可能诊断内存问题,因此您需要非常仔细地查看数据访问模式。试着回答这个问题:

  • 读取/秒与写入/秒?
  • 每次读取返回多少数据?
  • 每次写入写入多少数据?
  • 您的写入是否经常覆盖相同的行键和/或列名?
  • 如果他们这样做了,您应该意识到这将对压缩施加巨大压力,并且如果您的流量没有改变,但随着时间的推移您越来越频繁地看到 OOM,这是一个需要检查的问题。你的行有多宽?

查看 nodetool cfstats 是否有任何不寻常的地方,例如您希望很窄的非常宽的行或占用比您预期更多的空间的行。

您真的应该拥有可以从 Cassandra 和 JVM 中提取的每个指标的图表。为此,我使用 jmxtrans 和石墨,这些是我的 cassandra 集群中的核心工具,我从中获得的洞察力和随之而来的数据重构使我从一个几乎每天中断的 12 节点集群到过去没有停机的 3 节点集群年(并且流量翻倍),所以我不能强调这一点,您需要对生产集群进行适当的趋势分析,以正确理解、管理和优化您的数据访问。

于 2013-05-01T16:56:25.867 回答