📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

monitor.jvm.gc.overhead.debug 配置项用于控制JVM 垃圾回收(GC)开销的 DEBUG 级别日志阈值

当 GC 开销(GC 时间占总时间的百分比)达到或超过此阈值时,系统会记录 DEBUG 级别的日志,帮助开发人员分析 GC 行为。

配置项属性 #

  • 配置路径: monitor.jvm.gc.overhead.debug
  • 数据类型: Integer(整数)
  • 默认值: 10(10%)
  • 取值范围: 0-100(百分比)
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 否(需要重启节点生效)

配置项详解 #

工作机制 #

GC 开销监控流程

监控周期: refresh_interval (默认 1s)

每个周期:
├── 记录上次 GC 时间
├── 记录当前 GC 时间
├── 计算周期总耗时
├── 计算 GC 开销百分比
└── 判断日志级别


GC 开销计算:
fraction = (GC 时间 / 总时间) × 100


日志级别判断:
if (fraction >= warn_threshold) {
    → WARN 日志 ⚠️
} else if (fraction >= info_threshold) {
    → INFO 日志 ℹ️
} else if (fraction >= debug_threshold) {
    → DEBUG 日志 🔍
} else {
    → 不记录日志
}

阈值层级 #

三个 GC 开销阈值

默认配置:
├── WARN: 50%
├── INFO: 25%
└── DEBUG: 10%


阈值关系:
WARN (50%) > INFO (25%) > DEBUG (10%)


日志输出:
GC 开销 = 5%:
├── 5% < 10% (DEBUG)
└── 不记录日志


GC 开销 = 15%:
├── 15% >= 10% (DEBUG)
├── 15% < 25% (INFO)
└── 记录 DEBUG 日志 🔍


GC 开销 = 30%:
├── 30% >= 25% (INFO)
├── 30% < 50% (WARN)
└── 记录 INFO 日志 ℹ️


GC 开销 = 60%:
├── 60% >= 50% (WARN)
└── 记录 WARN 日志 ⚠️

DEBUG 日志示例 #

DEBUG 日志格式

[gc][{seq}] overhead, spent [{gc_time}] collecting in the last [{total_time}]


示例:

[gc][1] overhead, spent [150ms] collecting in the last [1000ms]
├── 序列号: 1
├── GC 时间: 150ms
├── 总时间: 1000ms
├── GC 开销: 15%
└── 级别: DEBUG (15% >= 10%)

配置建议 #

生产环境(默认) #

monitor:
  jvm:
    gc:
      overhead:
        debug: 10  # 默认值

建议: 保持默认值 10%。适合大多数生产环境。

开发环境 #

monitor:
  jvm:
    gc:
      overhead:
        debug: 5  # 降低阈值

建议: 设置为 5%。获取更详细的调试信息。

高负载环境 #

monitor:
  jvm:
    gc:
      overhead:
        debug: 15  # 提高阈值

建议: 设置为 15%。减少日志量。

禁用 DEBUG 日志 #

monitor:
  jvm:
    gc:
      overhead:
        debug: 0  # 禁用

建议: 设置为 0。完全禁用 GC 开销的 DEBUG 日志。

代码示例 #

easysearch.yml 基础配置 #

monitor:
  jvm:
    gc:
      overhead:
        debug: 10
        info: 25
        warn: 50

开发调试配置 #

monitor:
  jvm:
    gc:
      overhead:
        debug: 5
        info: 15
        warn: 30

生产优化配置 #

monitor:
  jvm:
    gc:
      overhead:
        debug: 10
        info: 25
        warn: 50

相关配置 #

配置项作用默认值
monitor.jvm.gc.overhead.debugDEBUG 阈值10%
monitor.jvm.gc.overhead.infoINFO 阈值25%
monitor.jvm.gc.overhead.warnWARN 阈值50%
monitor.jvm.gc.refresh_interval监控刷新间隔1s

阈值约束 #

配置约束规则

必须满足:
WARN > INFO > DEBUG


错误示例:
debug: 25
info: 25  ❌ (必须大于 DEBUG)
warn: 50


正确示例:
debug: 10
info: 25  ✅
warn: 50


启动验证:
if (info <= debug) {
    throw IllegalArgumentException(
        "monitor.jvm.gc.overhead.info must be greater than monitor.jvm.gc.overhead.debug"
    )
}

使用场景 #

推荐使用默认值的场景 #

  • 标准应用: 正常的 Java 应用
  • 平衡监控: 平衡日志详细度和性能
  • 生产环境: 生产环境推荐配置

推荐降低阈值的场景 #

  • 开发环境: 需要详细的 GC 调试信息
  • 性能调优: 正在进行性能优化
  • 问题排查: 排查 GC 相关问题
  • 测试环境: 测试环境获取更多信息

推荐提高阈值的场景 #

  • 高负载环境: GC 开销本来就高
  • 减少日志: 希望减少日志量
  • 稳定应用: 应用非常稳定
  • 存储受限: 日志存储空间有限

GC 开销分析 #

GC 开销的影响

GC 开销 < 10%:
├── 状态: 优秀 ✅
├── 应用流畅
└── 无需关注


GC 开销 10-25% (DEBUG):
├── 状态: 良好
├── 有一定 GC 压力
└── 记录 DEBUG 日志


GC 开销 25-50% (INFO):
├── 状态: 警告 ℹ️
├── GC 压力较大
└── 记录 INFO 日志


GC 开销 > 50% (WARN):
├── 状态: 严重 ⚠️
├── 大量时间在 GC
├── 应用性能下降
└── 记录 WARN 日志

性能调优建议 #

基于 GC 开销的调优

GC 开销持续 < 10%:
├── 堆内存配置合理 ✅
├── 无需调整
└── 继续监控


GC 开销持续在 10-25%:
├── 堆内存略显紧张
├── 建议增加堆内存
├── 或优化对象分配
└── 持续观察


GC 开销持续在 25-50%:
├── 堆内存明显不足 ℹ️
├── 应该增加堆内存
├── 或优化 GC 策略
└── 需要关注


GC 开销持续 > 50%:
├── 严重的内存问题 ⚠️
├── 必须增加堆内存
├── 检查内存泄漏
├── 优化 GC 策略
└── 紧急处理

注意事项 #

  1. 阈值关系: 必须满足 WARN > INFO > DEBUG

  2. 百分比单位: 配置值是百分比(0-100)。

  3. 启动验证: 启动时会验证配置的正确性。

  4. GC 开销计算: GC 时间 / 总时间 × 100。

  5. DEBUG 级别: 需要日志级别设置为 DEBUG 才能看到。

  6. 开发友好: 开发环境可以降低阈值获取更多信息。

  7. 生产建议: 生产环境建议保持默认值。

  8. 性能影响: 日志记录对性能影响很小。

  9. 配合使用: 与其他 GC 监控配置配合使用。

  10. 定期检查: 定期检查 GC 开销日志评估内存配置。

日志级别配置 #

查看 DEBUG 日志的配置

log4j2.properties:
logger.jvm.name = org.easysearch.monitor.jvm
logger.jvm.level = debug


或者通过 easysearch.yml:
logger.org.easysearch.monitor.jvm.level: debug