配置项作用 #
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.debug | DEBUG 阈值 | 10% |
monitor.jvm.gc.overhead.info | INFO 阈值 | 25% |
monitor.jvm.gc.overhead.warn | WARN 阈值 | 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 策略
└── 紧急处理
注意事项 #
阈值关系: 必须满足
WARN > INFO > DEBUG。百分比单位: 配置值是百分比(0-100)。
启动验证: 启动时会验证配置的正确性。
GC 开销计算: GC 时间 / 总时间 × 100。
DEBUG 级别: 需要日志级别设置为 DEBUG 才能看到。
开发友好: 开发环境可以降低阈值获取更多信息。
生产建议: 生产环境建议保持默认值。
性能影响: 日志记录对性能影响很小。
配合使用: 与其他 GC 监控配置配合使用。
定期检查: 定期检查 GC 开销日志评估内存配置。
日志级别配置 #
查看 DEBUG 日志的配置
log4j2.properties:
logger.jvm.name = org.easysearch.monitor.jvm
logger.jvm.level = debug
或者通过 easysearch.yml:
logger.org.easysearch.monitor.jvm.level: debug





