Spring Boot应用:Prometheus查询每分钟Major GC次数及告警需求
Spring Boot 2+ 下Prometheus监控Major GC次数的查询方案
Spring Boot 2.x之后默认使用Micrometer作为指标收集库,旧的jvm_gc_collection_seconds_sum指标已被废弃,你可以用**jvm_gc_collection_counts**这个计数器指标来实现需求,它会按GC类型统计累计的GC次数。
核心PromQL查询
要计算每分钟Major GC的次数,需要用rate()函数统计1分钟内的GC次数增量,再乘以60转换成每分钟频次:
rate(jvm_gc_collection_counts{gc="G1 Old Generation"}[1m]) * 60
适配不同垃圾收集器
不同垃圾收集器的gc标签值不同,你需要根据自己使用的收集器调整:
- G1收集器:
G1 Old Generation(对应Major GC) - Parallel收集器:
PS MarkSweep(对应Major GC) - CMS收集器:
ConcurrentMarkSweep - ZGC/Shenandoah:直接用
ZGC/Shenandoah(这类收集器不分Young/Major,若需监控全局GC次数可直接匹配)
如果要兼容多种收集器,可使用正则匹配:
rate(jvm_gc_collection_counts{gc=~"G1 Old Generation|PS MarkSweep|ConcurrentMarkSweep"}[1m]) * 60
告警规则示例
把查询语句放到Prometheus告警规则里,比如当每分钟Major GC次数超过5次时触发告警:
groups: - name: spring-boot-gc-alerts rules: - alert: HighMajorGcRate expr: rate(jvm_gc_collection_counts{gc=~"G1 Old Generation|PS MarkSweep|ConcurrentMarkSweep"}[1m]) * 60 > 5 for: 1m labels: severity: critical annotations: summary: "实例 {{ $labels.instance }} 出现高频率Major GC" description: "当前Major GC频次为 {{ $value | round }} 次/分钟,超过阈值5次/分钟"
内容的提问来源于stack exchange,提问作者Sachin Mankotia
相关产品推荐
相关产品推荐

