You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cassandra切换ZGC后随机出现JVM OOM重启问题求助

Cassandra切换ZGC后写入阶段随机OOM重启问题求助

近期将Cassandra的垃圾回收器从G1GC切换为基于JDK 11的ZGC,P99延迟得到大幅提升,但在写入操作期间,部分节点会随机因JVM OOM(内存溢出)而重启,当前CPU使用率低于50%,寻求有ZGC使用经验的人士提供解决方案。

相关配置信息

  • 最大堆内存:38 GB
  • 最大直接内存:38 GB
  • 物理内存:125 GB
  • CPU核心数:32
  • concurrent_reads:32

JVM配置参数

JVM_OPTS="$JVM_OPTS -XX:+UnlockExperimentalVMOptions"
JVM_OPTS="$JVM_OPTS -XX:+UseZGC"
JVM_OPTS="$JVM_OPTS -XX:ConcGCThreads=16"
JVM_OPTS="$JVM_OPTS -XX:ParallelGCThreads=16"
JVM_OPTS="$JVM_OPTS -XX:MaxTenuringThreshold=9"
JVM_OPTS="$JVM_OPTS -XX:MaxGCPauseMillis=500"
JVM_OPTS="$JVM_OPTS -XX:G1RSetUpdatingPauseTimePercent=5"
JVM_OPTS="$JVM_OPTS -XX:InitiatingHeapOccupancyPercent=25"

JVM错误日志

A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x00007f077cd64df4, pid=2341073, tid=2342488
JRE version: OpenJDK Runtime Environment (Red_Hat-11.0.22.0.7-1) (11.0.22+7) (build 11.0.22+7-LTS)
Java VM: OpenJDK 64-Bit Server VM (Red_Hat-11.0.22.0.7-1) (11.0.22+7-LTS, mixed mode, tiered, z gc, linux-amd64)
Problematic frame:
V  [libjvm.so+0xbf4df4]  Node::rematerialize() const+0x4

解决方案建议

  1. 移除G1GC专属参数:配置中的-XX:G1RSetUpdatingPauseTimePercent=5是G1GC独有的参数,ZGC不支持,保留会导致无效配置甚至潜在冲突,直接删除该参数。
  2. 调整ZGC并发线程数:ConcGCThreads=16对于32核CPU来说过高,ZGC推荐并发线程数为CPU核心数的1/4~1/2,建议改为-XX:ConcGCThreads=8,减少GC线程对系统资源的占用,降低内存管理压力。
  3. 压缩直接内存配置:当前堆内存+直接内存合计76GB,ZGC自身还需要额外内存(如标记位图、页表等),过大的直接内存可能导致系统可用内存不足触发OOM。建议将最大直接内存调整为20GB,添加参数-XX:MaxDirectMemorySize=20G。
  4. 升级JDK版本:你使用的OpenJDK 11.0.22存在ZGC相关的已知Bug,比如日志中出现的Node::rematerialize()段错误,升级到JDK 11的最新补丁版本(如11.0.25+)或JDK 17(ZGC在该版本中更成熟)可修复此类底层问题。
  5. 固定堆内存大小:给JVM添加-Xms38G参数,让堆内存初始值与最大值一致,避免JVM动态调整堆大小带来的额外开销,ZGC对固定大小堆的处理效率更高。
  6. 调整GC触发阈值:InitiatingHeapOccupancyPercent=25设置过低会导致GC过于频繁,增加内存波动风险,建议调整到40~50,减少GC触发次数。

内容的提问来源于stack exchange,提问作者user21080539

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:38:18