【发布时间】:2018-03-16 01:52:51
【问题描述】:
我们有一个利用率很高的 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
行为基本保持不变:
- Old Gen 开始填满。
- 如果没有完整的 GC 和 STW 事件,GC 将无法正确清理它。
- 完整的 GC 开始需要更长的时间,直到节点完全没有响应。
我将尽快获取 cfstats 输出以获得最大分区大小和每次读取的墓碑,然后再次编辑帖子。
【问题讨论】:
-
堆在 GC 增加之后,因此您的应用程序只是需要更多内存,您有泄漏或 cassandra 的配置方式以 G1 无法跟上的方式突发分配。仅凭这些图表无法区分这些案例。
-
您当前的 GC 设置是什么?
-
您能否包含您的 cfstats 输出以获得最大分区大小和每次读取的墓碑?扫描 tombstone 和反序列化大型分区索引是高 obj 分配率的常见原因。同样在评论之上,很难说出如何在不知道当前设置的情况下改进您的 GC
-
@ChrisLohfink 我试图使用默认的 G1 GC 设置,我确实使用了 XX:MaxGCPauseMillis,但没有任何改变。我使用 G1 和 CMS 的推荐设置编辑了带有 GC 报告的帖子,我将尽快获得您询问的信息。
-
@the8472 看起来像是内存泄漏 (plumbr.eu/blog/memory-leaks/…),你能举个例子说明我可以检查哪些 Cassandra 设置吗?
标签: cassandra garbage-collection cassandra-3.0 g1gc