我们有一个6节点的Cassandra集群正在大量使用。我们已经处理了很多垃圾收集器停止世界事件,在我们的节点中可能需要50秒,同时Cassandra Node没有响应,甚至没有接受新的登录。
额外细节:
非常感谢任何帮助!
修改1:
检查对象创建统计信息,它看起来并不健康。
编辑2:
我尝试使用 Chris Lohfink 建议的设置,这是GC报告:
使用CMS建议设置 http://gceasy.io/my-gc-report.jsp?p=c2hhcmVkLzIwMTcvMTAvOC8tLWdjLmxvZy4wLmN1cnJlbnQtLTE5LTAtNDk=
使用G1建议设置 http://gceasy.io/my-gc-report.jsp?p=c2hhcmVkLzIwMTcvMTAvOC8tLWdjLmxvZy4wLmN1cnJlbnQtLTE5LTExLTE3
行为基本保持不变:
我将获得cfstats输出以获得最大分区大小和每次读取的逻辑删除,并再次编辑帖子。
答案 0 :(得分:3)
你看过使用Zing吗?像这样的Cassandra情况是一个经典的用例,因为Zing从根本上消除了Cassandra节点和集群中所有与GC相关的故障。
您可以在我最近的#34;了解GC"中看到有关如何/为何的详细信息。来自JavaOne(https://www.slideshare.net/howarddgreen/understanding-gc-javaone-2017)的讨论。或者只是跳过幻灯片56-60,了解Cassandra特定的结果。
答案 1 :(得分:2)
在不知道您的现有设置或可能的数据模型问题的情况下,继续猜测一些保守的设置,以尝试减少疏散暂停,因为没有足够的空间(检查gc日志):
-Xmx12G -Xms12G -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:MaxGCPauseMillis=500 -XX:-ReduceInitialCardMarks -XX:G1HeapRegionSize=32m
这还应该有助于减少更新记忆集的暂停,这会成为问题并减少可能成为问题的巨大对象,具体取决于数据模型。 确保未设置-Xmn 。
带有C *的12Gb可能更适合使用CMS来实现其价值,您可以获得更好的吞吐量。随着时间的推移,需要注意可以分配的相当大的对象的碎片。-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=55 -XX:MaxTenuringThreshold=3 -Xmx12G -Xms12G -Xmn3G -XX:+CMSEdenChunksRecordAlways -XX:+CMSParallelInitialMarkEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSWaitDuration=10000 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCondCardMark
很可能是数据模型的问题或者您的配置不足。