【问题标题】:Cassandra --JVM Tuning for G1GCCassandra——G1GC 的 JVM 调优
【发布时间】:2017-07-24 20:35:47
【问题描述】:

由于 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)

调整此设置将减少丢弃的突变消息。我需要增加还是减少该值。

【问题讨论】:

  • 你应该发布详细的 GC 日志,而不是一行。 -XX:+PrintGCDetails

标签: cassandra jvm database-tuning


【解决方案1】:

1.8s GC 可能不是唯一的问题,如果突变需要 5s 来处理。 tpstats 中是否有大量待处理的金额? cpu负载如何?你的写作速度可能是 Cassandra 无法用你的硬件和数据模型维持的。

您可能只想先尝试增加堆大小。 16GB 以下的空间很难用 G1 进行调整。如果您包含 1.8 秒后的 gc 日志,则更容易提供帮助,如果没有日志,则很难说出究竟发生了什么。您可以尝试减少 gc 时间目标,但如果这个长 GC 是异常值,它可能无济于事。如果更新记忆集的时间过长,您可能需要增加区域大小。检查可能是数据建模问题的巨大对象等(增加区域大小会有所帮助)。如果您因分配尖峰而导致疏散失败,请增加堆大小或将 GCReservePercent 设置为 25 而不是 10,以使其有更多空间来处理尖峰。

【讨论】:

  • 谢谢,克里斯 没有待处理的任务
  • 谢谢,克里斯,没有待处理的任务。我们的堆大小为 16gb。每次我们有丢弃的突变时,我们都会看到新的 GEN 大约需要 2 秒。所以如果我将参数值减少到 250 毫秒是没用。?
  • 视情况而定。如果您正在安静地运行然后分配突然激增,您可能仍然有问题。这是您可以看到异常 GC 的地方(即,大多数时间是 500 毫秒,但每天一次,当它反序列化压缩中的大型分区索引时,它有 2 秒的 GC)。这就是 gc 日志有用的地方,也可以确定要调整什么来防止它。
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2014-05-08
相关资源
最近更新 更多