当启动新的要引导的节点时,引导过程开始从集群中的其他节点流式传输数据。在短时间内(通常为1分钟或更短时间) - 集群中的其他节点显示高的Par New GC暂停时间,然后节点从集群中掉落,失败了流会话。
INFO [主要] 2015-04-27 16:59:58,644 StreamResultFuture.java (第91行) [Stream #d42dfef0-ecfe-11e4-8099-5be75b0950b8] 开始与/10.1.214.186进行流会话 INFO [GossipTasks:1] 2015-04-27 17:01:06,342 Gossiper.java (第890行) InetAddress /10.1.214.186现在已经宕机 INFO [HANDSHAKE-/10.1.214.186] 2015-04-27 17:01:21,400 OutboundTcpConnection.java (第386行) 与/10.1.214.186握手版本 INFO [RequestResponseStage:11] 2015-04-27 17:01:23,439 Gossiper.java (第876行) InetAddress /10.1.214.186现在已经上线
然后在另一个节点上:
10.1.214.186错误[STREAM-IN-/10.1.212.233] 2015-04-27 17:02:07,007 StreamSession.java (line 454) [Stream #d42dfef0-ecfe-11e4-8099-5be75b0950b8]发生了流错误
还可以在日志中看到以下内容:
10.1.219.232信息[ScheduledTasks:1] 2015-04-27 18:20:19,987 GCInspector.java(行116)ParNew的GC:2次收集,118272毫秒,已使用980357368;最大值为12801015808
10.1.221.146信息[ScheduledTasks:1] 2015-04-27 18:20:29,468 GCInspector.java(行116)ParNew的GC:1次收集,154911毫秒,已使用1287263224;最大值为12801015808
似乎每次尝试引导新节点时都会发生这种情况,而且发生在不同的节点上。
我找到了这个相关的票据。https://issues.apache.org/jira/browse/CASSANDRA-6653 我的唯一猜测是,当新节点启动时,会触发大量的压缩,这可能会导致GC暂停时间,我考虑设置concurrent_compactors = 1/2 my total CPU
有人有想法吗?编辑:关于GC设置的更多细节,在EC2上使用i2.2xlarge节点:
也MAX_HEAP_SIZE="12G"
HEAP_NEWSIZE="800M"
JVM_OPTS="$JVM_OPTS -XX:+UseParNewGC" JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC" JVM_OPTS="$JVM_OPTS -XX:+CMSParallelRemarkEnabled" JVM_OPTS="$JVM_OPTS -XX:SurvivorRatio=8" JVM_OPTS="$JVM_OPTS -XX:MaxTenuringThreshold=1" JVM_OPTS="$JVM_OPTS -XX:CMSInitiatingOccupancyFraction=75" JVM_OPTS="$JVM_OPTS -XX:+UseCMSInitiatingOccupancyOnly" JVM_OPTS="$JVM_OPTS -XX:+UseTLAB"