我们有一个 6 节点 Cassandra 集群,利用率很高。我们一直在处理大量垃圾收集器停止世界事件,这在我们的节点中可能需要长达 50 秒的时间,同时 Cassandra 节点没有响应,甚至不接受新的登录。
额外详细信息:
- Cassandra 版本:3.11
- 堆大小 = 12 GB
- 我们使用默认设置的 G1 垃圾收集器
- 节点大小:4 个 CPU 28 GB RAM
- G1 GC 行为在所有节点上都是相同的。
任何帮助将不胜感激!
编辑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
行为基本保持不变:
- 老一代开始填满。
- 如果没有完整的 GC 和 STW 事件,GC 就无法正确清理它。
- 完整 GC 开始花费更长时间,直到节点完全无响应。
我将尽快获取最大分区大小和每次读取的逻辑删除的 cfstats 输出,并再次编辑帖子。
最佳答案
您考虑过使用 Zing 吗?像这样的 Cassandra 情况是一个典型的用例,因为 Zing 从根本上消除了 Cassandra 节点和集群中所有与 GC 相关的故障。
您可以在我最近的 JavaOne 演讲“理解 GC”( https://www.slideshare.net/howarddgreen/understanding-gc-javaone-2017 ) 中看到有关如何/为何的一些详细信息。或者直接跳到幻灯片 56-60 了解 Cassandra 特定的结果。
关于Cassandra 和 G1 垃圾收集器停止世界事件 (STW),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46568777/