首页 > 解决方案 > cassandra 中的 G1GC 垃圾收集

问题描述

我们正计划将 GC 从 CMS 移动到 G1GC 。如果我们更改为 G1GC ,那么从 dse 到 apache 仍然需要这些参数。使用 G1GC 时这些参数如何影响垃圾收集

-XX:ThreadPriorityPolicy=42
-XX:+HeapDumpOnOutOfMemoryError
-Xss256k

# Larger interned string table, for gossip's benefit (CASSANDRA-6410)
-XX:StringTableSize=1000003
-XX:+AlwaysPreTouch
# Disable biased locking as it does not benefit Cassandra.
-XX:-UseBiasedLocking

`# Enable thread-local allocation blocks and allow the JVM to automatically
-XX:+UseTLAB
-XX:+ResizeTLAB
-XX:+UseNUMA
-XX:+PerfDisableSharedMem
-Djava.net.preferIPv4Stack=true`

标签: cassandragarbage-collection

解决方案


这些在CMS和G1之间几乎没有区别。

TLAB's 与 CMS 相同,它可以通过为每个线程提供一个缓冲区来提供帮助,它们可以在伊甸园空间中直接分配,这意味着线程安全分配没有争用或要求(快得多)。但是,如果您有很多活动线程(例如连接了超过 1000 个活动客户端的大型集群),因为每个线程缓冲区最终都会变小,并且随着不同线程在不同时间处于活动状态,调整大小变得不准确。此外,如果发生较大的插入,则分配将不适合缓冲区并最终分配到共享空间中。也就是说,使用 TLAB/resize 运行几乎总是更好。

UseBiasedLocking也和 CMS 一样,没有太多同步,STW 暂停会影响事情。

UseNUMA不适用于 g1 或 cms,仅适用于并行收集器。设置它什么都不做

PerfDisableSharedMem牺牲您调试和诊断性能问题的能力,以换取在刷新 hsperfdata 时防止可能的暂停

preferIPv4Stack不要使用ipv6


推荐阅读