Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra和G1垃圾收集器停止世界事件(STW)_Cassandra_Garbage Collection_Cassandra 3.0_G1gc - Fatal编程技术网

Cassandra和G1垃圾收集器停止世界事件(STW)

Cassandra和G1垃圾收集器停止世界事件(STW),cassandra,garbage-collection,cassandra-3.0,g1gc,Cassandra,Garbage Collection,Cassandra 3.0,G1gc,我们有一个6节点的Cassandra集群,利用率很高。我们一直在处理垃圾收集器停止世界事件,这在我们的节点中可能需要50秒,同时Cassandra节点没有响应,甚至不接受新的登录 额外详情: 卡桑德拉版本:3.11 堆大小=12 GB 我们正在使用带有默认设置的G1垃圾收集器 节点大小:4个CPU 28 GB RAM G1 GC行为在所有节点上都是相同的 任何帮助都将不胜感激 编辑1: 检查对象创建统计信息,它看起来一点也不健康 编辑2: 我已尝试使用Chris Lohfin

我们有一个6节点的Cassandra集群,利用率很高。我们一直在处理垃圾收集器停止世界事件,这在我们的节点中可能需要50秒,同时Cassandra节点没有响应,甚至不接受新的登录

额外详情:

  • 卡桑德拉版本:3.11
  • 堆大小=12 GB
  • 我们正在使用带有默认设置的G1垃圾收集器
  • 节点大小:4个CPU 28 GB RAM
  • G1 GC行为在所有节点上都是相同的
任何帮助都将不胜感激


编辑1:

检查对象创建统计信息,它看起来一点也不健康


编辑2:

我已尝试使用Chris Lohfink建议的设置,以下是GC报告:

使用CMS建议设置

使用G1建议设置

行为基本上保持不变:

  • 老根开始吃饱了
  • 如果没有完整GC和STW事件,GC无法正确清理它
  • 完整GC开始需要更长的时间,直到节点完全无响应

  • 我将尽快获取最大分区大小和每次读取的墓碑的cfstats输出,并再次编辑帖子。

    在不知道您现有的设置或可能的数据模型问题的情况下,这里猜测一些保守的设置可用于减少因空间不足而导致的疏散暂停(检查gc日志):

    这还应有助于减少更新记忆集的暂停(这会成为一个问题),并减少可能成为问题的庞大对象(取决于数据模型)。确保未设置-Xmn

    12Gb和C*可能更适合使用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 
    

    很可能是数据模型或资源调配不足的问题。

    您是否考虑过使用Zing?像这样的Cassandra情况是一个典型的用例,因为Zing从根本上消除了Cassandra节点和集群中所有与GC相关的故障


    在我最近从JavaOne()开始的“理解GC”演讲中,您可以看到一些关于如何/为什么的细节。或者直接跳到幻灯片56-60查看Cassandra特定的结果。

    GC增加后的堆,因此要么应用程序只需要更多内存,要么存在漏洞,要么Cassandra的配置方式会以G1无法跟上的方式突发分配。这些情况无法单独从这些图表中区分。您当前的GC设置是什么?您可以包括最大分区大小和每次读取的逻辑删除的cfstats输出吗?扫描墓碑和反序列化大分区索引是导致obj分配率高的常见原因。同样在上面的评论中,如果不知道当前的情况,很难说如何提高你的GCssettings@ChrisLohfink我试着使用默认的G1 GC设置,我确实使用XX:MaxGCPauseMillis玩了arround,但没有任何改变。我使用G1和CMS的推荐设置编辑了GC报告,我将尽快获得您询问的信息。@the8472它看起来像内存泄漏(),您能给我一个可以检查Cassandra设置的示例吗?
    -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=55 -XX:MaxTenuringThreshold=3 -Xmx12G -Xms12G -Xmn3G -XX:+CMSEdenChunksRecordAlways -XX:+CMSParallelInitialMarkEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSWaitDuration=10000 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCondCardMark