由于 GC,我正在丢失突变。我的年轻一代 GC 花费了很长时间
G1 年轻代 GC,耗时 1804 毫秒。 G1 伊甸园空间:771751936 -> 0; G1老一代:5351931920 -> 4995416072; G1幸存者空间:83886080 -> 58720256;
MUTATION 消息在最后 5000 毫秒内被丢弃:814 表示内部超时,0 表示跨节点超时。平均内部丢弃延迟:2874 毫秒和平均跨节点丢弃延迟:0 毫秒
为了避免这种情况,我应该减少 Cassandra-env.sh 中的 MaxGCPauseMillis 选项。
我们的默认值为 500 毫秒。(JVM_OPTS="$JVM_OPTS -XX:MaxGCPauseMillis=500)
调整此设置会减少丢弃的变异消息。我需要增加还是减少该值。
最佳答案
1.8s GC 可能不是唯一的问题,如果 mutation 需要超过 5s 来处理。 tpstats 中是否有大量待处理? cpu负载如何?您的写入速度可能是 Cassandra 无法通过您的硬件和数据模型维持的。
您可能只想先尝试增加堆大小。 16gb 以下的空间很难用 G1 调整。如果您包含从 1.8 秒开始的 gc 日志,则更容易提供帮助,如果没有日志,则很难说出到底发生了什么。您可以尝试减少 gc 时间目标,但如果这个长 GC 是异常值,它可能无济于事。如果更新 memset 的时间太长,您可能需要增加区域大小。检查巨大的对象,以及可能是数据建模问题的对象(增加区域大小会有所帮助)。如果您因分配峰值而疏散失败,请增加堆大小或将 GCReservePercent 设置为 25 而不是 10,以为其提供更多空间来处理峰值。
关于Cassandra--G1GC 的 JVM 调优,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45289603/