PromQL实现Actuator获取的JVM指标的Full GC次数监控

这篇具有很好参考价值的文章主要介绍了PromQL实现Actuator获取的JVM指标的Full GC次数监控。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Boot 版本需要2.0.0或更高版本。
添加Micrometer Prometheus registry依赖:

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

在application.properties中开启prometheus端点:

management.endpoints.web.exposure.include=health,prometheus,metrics

做完上述配置后,Actuator就可以通过Micrometer获取到JVM的GC指标,其中包括:

  • jvm_gc_memory_promoted_bytes_total:记录New Generation晋升到Old Generation的内存大小总和。反映对象存活率。
  • jvm_gc_max_data_size_bytes:Old Generation的最大内存容量。
  • jvm_gc_memory_allocated_bytes_total:累计向堆分配的内存大小。反映内存使用增长趋势。
  • jvm_gc_pause_seconds_x:GC暂停时间,可用于记录GC停顿时间和次数。
  • jvm_gc_pause_seconds_count :统计 Young GC 和 Full GC 的暂停次数
  • jvm_gc_live_data_size_bytes 表示 JVM 堆内存中存活的数据大小(GC 前老年代的内存使用大小)。
    PromQL实现Actuator获取的JVM指标的Full GC次数监控,jvm,prometheus,gc
    jstat -gc pid查看gc情况
    PromQL实现Actuator获取的JVM指标的Full GC次数监控,jvm,prometheus,gc

end of minor GC 和 end of major GC 都是 JVM 垃圾收集的相关指标,它们分别代表:

  • end of minor GC - 小型垃圾收集(Young GC)结束
  • end of major GC - 大型垃圾收集(Full GC)结束
    两者的主要区别在于:
  1. 收集的内存区域不同
  • minor GC 收集新生代内存区域
  • major GC 收集新生代和老年代内存区域
  1. 发生频率不同
  • minor GC 频繁发生,回收高死亡率的短生命周期对象
  • major GC 间隔时间长,回收长期存活的老对象
  1. 消耗时间不同
  • minor GC 周期短,收集效率高
  • major GC 周期长,执行效率较低,可能造成停顿
  1. 触发条件不同
  • minor GC 由新生代内存不足触发
  • major GC 由老年代内存不足或元数据触发阈值触发
  1. 收集对象不同
  • minor GC 主要是无用的短生命周期对象
  • major GC 主要是存活时间长的老对象
jvm_gc_pause_seconds_count

jvm_gc_pause_seconds_count是JVM中与GC相关的一个重要指标,它统计了不同类型的GC过程导致程序暂停的次数。
主要通过观察该指标的标签来分析其涵义:

  • action:表示GC的不同阶段,例如minor GC开始或结束,major GC开始或结束等
  • cause:导致这次GC的原因,例如Allocation Failure(分配内存失败)、Metadata GC Threshold(元数据GC阈值)等

出现full GC则告警

groups:
  - name: jvm.rules
    rules:
      - alert: JVMFullGcCountTooMuchIn1d
        expr: increase(jvm_gc_pause_seconds_count{action="end of major GC"}[1d]) >1
        labels:
          severity: warning
        annotations:
          summary: "一天内full GC次数>1次"
          description: "(env: {{ $labels.env }})应用{{ $labels.application }}一天内full GC次数{{ $value }}次 \n"

这个 PromQL 表达式的意思是:1天内(通过[1d]指定时间范围)Full GC(major GC)结束时(action="end of major GC"过滤条件)的GC 暂停次数(jvm_gc_pause_seconds_count指标)的增加量(increase函数)大于1。也就是检测在1天内,Full GC的增量次数是否大于1。
这可以用于设置一个Full GC次数增长的告警规则:

  • 如果1天内Full GC次数的增量超过1,则可能存在问题
  • 该表达式作为告警规则的阈值,一旦触发则发送告警
    设置这个规则的目的是快速发现Full GC次数增加的情况,由于Full GC会造成较长时间的应用线程停顿,次数增多可能导致用户体验下降。
# 该表达式不精准,被弃用
groups:
  - name: jvm.rules
    rules:
      - alert: JVMFullGcCountTooMuch
        expr: sum(changes(jvm_gc_live_data_size_bytes[5m])<0.9)by (namespace,application,env)>1
        labels:
          severity: warning
        annotations:
          summary: "full GC次数>1次"
          description: "(env: {{ $labels.env }})应用{{ $labels.application }}full GC次数为{{ $value }}次 \n"

这个 PromQL 表达式的作用是计算最近5分钟内,jvm_gc_live_data_size_bytes 指标变化小于0.9的次数。
具体解释:文章来源地址https://www.toymoban.com/news/detail-646085.html

  1. changes(jvm_gc_live_data_size_bytes[5m]) 计算最近5分钟的存活数据大小的变化比例。
  2. changes(jvm_gc_live_data_size_bytes[5m]) < 0.9 表示变化比例小于0.9,即减少超过10%。
  3. sum(…) 对上一步的比较结果求和,即统计变化比例小于0.9的次数。
  4. sum(…) > 1 表示最近5分钟内,变化幅度超过10%的次数大于1。
    通常老年代内存数据大小的明显下降,意味着发生了 Full GC。
    所以这个表达式的作用就是检测最近5分钟内是否发生过多次 Full GC
    通过设置不同的时间范围和变化比例阈值,可以根据需要检测 Full GC 情况。
    这个表达式利用了 Prometheus 的聚合查询功能,可以实现对 GC 行为的监控检测。

到了这里,关于PromQL实现Actuator获取的JVM指标的Full GC次数监控的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • actuator/prometheus使用pushgateway上传jvm监控数据

             prometheus已经部署pushgateway服务,访问{pushgateway.server:9091}可以看到面板 基于springboot引入支持组件,版本可以 开启配置          在pushgateway面板中会显示新增的服务,在prometheus中也可能看到采集的数据

    2024年02月12日
    浏览(36)
  • Grafana展示k8s中pod的jvm监控面板/actuator/prometheus

            为保障java服务正常运行,对服务的jvm进行监控,通过使用actuator组件监控jvm情况,使用prometheus对数据进行采集,并在Grafana展现。          基于k8s场景 配置service的lable,便于prometheus使用lable进行数据采集,本案例使用prometheus=jvm为标签 重启service或pod,新增标签生效

    2024年02月13日
    浏览(52)
  • Java线上故障排查(CPU、磁盘、内存、网络、GC)+JVM性能调优监控工具+JVM常用参数和命令

    根据服务部署和项目架构,从如下几个方面排查: (1)运用服务器:排查内存,cpu,请求数等; (2)文件图片服务器:排查内存,cpu,请求数等; (3)计时器服务器:排查内存,cpu,请求数等; (4)redis服务器:排查内存,cpu,连接数等; (5)db服务器:排查内存,cpu,连接数

    2024年02月07日
    浏览(61)
  • 分布式 | 如何搭建 DBLE 的 JVM 指标监控系统

    本篇文章采用 Docker 方式搭建 Grafana + Prometheus 实现对 DBLE 的 JVM 相关指标的监控系统。 作者:文韵涵 爱可生 DBLE 团队开发成员,主要负责 DBLE 需求开发,故障排查和社区问题解答。 本文来源:原创投稿 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编

    2024年02月12日
    浏览(55)
  • SpringBoot+actuator和admin-UI实现监控中心

    使用SpringBoot很久了,但是很少使用到SpringBoot的查看和监控,将来八成也不会用到,万一有机会用到呢?所以记录一下以前学习SpringBoot+actuator和adminUI实现监控中心的方式 Springboot的版本2.0.x 导入对应的包 application.properties 启动之后 访问 在这里使用的Actuator是spring boot的一个附

    2024年02月14日
    浏览(39)
  • 案例分享-full gc导致k8s pod重启

     在之前的记一次k8s pod频繁重启的优化之旅中分享过对于pod频繁重启的一些案例,最近又遇到一例,继续分享出来希望能给大家带来些许收获。 报警群里突然显示某pod频繁重启,我随即上去查看日志,主要分这么几步:   1.查看pod重启的原因,kubectl descirbe pod 上面的Reason:

    2024年02月02日
    浏览(52)
  • 深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。

    JVM内存空间基础知识点(基于JDk1.8) 1.方法区:逻辑概念,元空间,方法区主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与堆进行区分,通常又叫“非堆”。 2.程序计数器:程序计数器可以看作当前线程所执行的字节码的

    2024年04月25日
    浏览(39)
  • SpringBoot开启 Actuator springboot开启actuator监控信息

    官网文档: https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/actuator-api/html/ 2.1.5.RELEASE 为对应springboot版本号 include: \\\"*\\\" 表示 公开所有端点 include: \\\"health,metrics,threaddump\\\" 表示只公开这三个 health,metrics,threaddump 端点 所有可选的端点及说明 端点 作用 “*” 公开全部 health 提供应用程序的健

    2024年01月22日
    浏览(56)
  • Prometheus实现自定义指标监控

    前面我们已经通过 Prometheus+Grafana 实现了监控,可以在 Grafana 上看到对应的 SpringBoot 应用信息了, 通过这些信息我们可以对 SpringBoot 应用有更全面的监控。 但是如果我们需要对一些业务指标做监控,我们应该怎么做呢?这篇文章就带你一步步实现一个模拟的订单业务指 标监

    2024年02月12日
    浏览(44)
  • Springboot Actuator监控

    官网连接: Spring Boot Reference Documentation Spring Boot包括许多附加功能,帮助您在将应用程序推向生产时监视和管理应用程序。您可以选择使用HTTP端点或JMX来管理和监视应用程序。 审计,健康和指标收集 也可以自动应用于应用程序。 spring-boot-actuator 模块提供所有Spring Boot的生产

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包