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

Apache Ignite:两表交叉连接时出现长时间GC停顿问题

Apache Ignite集群GC日志未生成问题排查

环境与问题描述

  • 搭建了4节点Apache Ignite集群,使用的JVM参数如下:
ENV JAVA_OPTS="-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xms1g\
 -Xmx1500m -XX:+AlwaysPreTouch -XX:+UseParNewGC \
 -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled \
 -XX:+CMSPermGenSweepingEnabled -XX:+CMSScavengeBeforeRemark \
 -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC \
 -XX:+UseContainerSupport \
 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation\
 -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xloggc:/opt/ignite/logs/log.txt"
  • 尝试过G1、CMS两种垃圾收集器,JVM内存配置为最小1GB、最大1500MB,集群关联两张各含10万条数据的表。
  • 已添加GC日志相关参数并指定日志路径,但/opt/ignite/logs/目录下未生成GC日志(该目录已存在)。

可能的原因及排查方案

1. JDK版本兼容性问题

如果使用Java 9及以上版本,原有GC日志参数存在废弃项:

  • -Xloggc、-XX:+PrintGCDetails等参数已被统一的-Xlog参数替代,旧参数可能无法生效。建议替换为符合新版本的参数:
-Xlog:gc*:/opt/ignite/logs/log.txt:time,uptime:filecount=10,filesize=10M
  • -XX:+CMSPermGenSweepingEnabled在Java 8之后已废弃(PermGen被Metaspace取代),无效参数可能导致JVM忽略部分配置。

2. 目录权限不足

运行Ignite的进程用户可能没有/opt/ignite/logs/目录的写入权限:

  • 验证权限:切换到Ignite运行用户,执行touch /opt/ignite/logs/test.txt,若无法创建则需调整权限:
chown -R <ignite运行用户>:<用户组> /opt/ignite/logs/
chmod 755 /opt/ignite/logs/

3. JVM参数未实际生效

部分Ignite部署方式(如Docker)可能覆盖JAVA_OPTS,或使用专属变量(如IGNITE_JVM_OPTS):

  • 查看进程实际参数:执行jps -v | grep Ignite,确认GC日志相关参数是否出现在输出中。
  • 检查启动脚本:确认脚本是否正确读取并应用了JAVA_OPTS。

4. GC未触发

若集群负载极低,可能尚未触发GC操作,导致日志未生成:

  • 手动触发GC:执行jcmd <ignite进程ID> GC.run,之后检查日志目录是否生成文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:45:20