我的cassandra集群有6个节点,但是直到现在,其中的5个节点都因OOM导致的映射失败。
在此之前,CMS会抛出WARN日志,而新一代将完全变空。这不是典型的CMS行为,但我不知道发生了什么。
WARN [服务线程] 2018-10-03 23:47:34,510 GCInspector.java:282-ConcurrentMarkSweep GC在4748毫秒内。 CMS旧纪元:4311229160-> 1434360152;伊甸园空间:215565624-> 0;幸存者空间:6320160-> 0
我使用Cassandra 3.9,并且Java堆大小为8GB。我不修改任何jvm选项。
接下来我应该如何检查?
这是system.log的总结。
WARN [Service Thread] 2018-09-22 16:56:28,089 GCInspector.java:282 - ConcurrentMarkSweep GC in 3926ms. CMS Old Gen: 1768828144 -> 1173494472; Par Eden Space: 68469544 -> 0; Par Survivor Space: 9587608 -> 0
ERROR [CompactionExecutor:89253] 2018-09-22 16:56:28,311 CassandraDaemon.java:226 - Exception in thread Thread[CompactionExecutor:89253,1,main]
org.apache.cassandra.io.FSReadError: java.io.IOException: Map failed
Caused by: java.io.IOException: Map failed
Caused by: java.lang.OutOfMemoryError: Map failed
WARN [GossipTasks:1] 2018-09-22 16:56:38,185 FailureDetector.java:287 - Not marking nodes down due to local pause of 9094437652 > 5000000000
INFO [CompactionExecutor:89253] 2018-09-22 16:56:38,190 HeapUtils.java:136 - Dumping heap to /cassandra/java_1521034957.hprof ...
Heap dump file created
ERROR [CompactionExecutor:89253] 2018-09-22 16:56:43,305 JVMStabilityInspector.java:141 - JVM state determined to be unstable. Exiting forcefully due to:
java.lang.OutOfMemoryError: Map failed
答案 0 :(得分:0)
强烈建议Cassandra使用G1GC而不是CMS。
为了将G1设置为Java垃圾收集器
G1设置部分:使用Hotspot垃圾优先收集器。 -XX:+ UseG1GC
在STW期间让JVM减少记住的设置工作 倾向于并发GC。减少p99.9延迟。 -XX:G1RSetUpdatingPauseTimePercent = 5
Reference设置G1GC
答案 1 :(得分:0)
这看起来像您的系统正在抛出OutOfMemory异常(包括启动堆转储)。默认情况下,堆外直接字节缓冲区将分配最大的堆大小-因此又分配了8gb。如果您的节点没有超过16gb的空间,则可能会达到极限。您的直接字节缓冲区也可能超出了可以使用-XX:MaxDirectMemorySize=12G
增加的缓冲区(如果您的缓冲区超过16gb)。确保使用vm.max_map_count = 1000000
中的/etc/sysctl.conf
和nproc到32768 memlock unlimited等配置内核设置。Datastax在here上也提供了与Cassandra相关的很好的建议。 / p>