前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在云原生中监控JVM指标

如何在云原生中监控JVM指标

作者头像
用户5166556
发布于 2023-03-18 07:04:02
发布于 2023-03-18 07:04:02
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

尽管 Java 的性能和底层编译型语言没有太大区别,但您可能仍需要调整(Java 虚拟机)JVM 性能以满足应用程序的需求。在可扩展性和性能方面,应用程序的需求和要求可能会有所不同,这时需要持续监控您的 JVM 性能(一些关键指标——内存使用、垃圾收集和线程),以相应地对其进行调整。

我们可以通过使用 JMX Exporter 将应用程序 JMX 对象暴露给 Prometheus 并在 Grafana 中创建所需的图表来监控这些指标。为此,请按照以下步骤操作。

一般 Java 集成 Prometheus 监控指标有两种方式。一种是依赖中引入,另外一种是通过agent执行。

依赖引入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- The client -->
<dependency>
  <groupId>io.prometheus</groupId>
  <artifactId>simpleclient</artifactId>
  <version>0.15.0</version>
</dependency>
<!-- Hotspot JVM metrics-->
<dependency>
  <groupId>io.prometheus</groupId>
  <artifactId>simpleclient_hotspot</artifactId>
  <version>0.15.0</version>
</dependency>
<!-- Exposition HTTPServer-->
<dependency>
  <groupId>io.prometheus</groupId>
  <artifactId>simpleclient_httpserver</artifactId>
  <version>0.15.0</version>
</dependency>
<!-- Pushgateway exposition-->
<dependency>
  <groupId>io.prometheus</groupId>
  <artifactId>simpleclient_pushgateway</artifactId>
  <version>0.15.0</version>
</dependency>

对于基于 Springboot 开发的 Java 框架,一定要引入micrometer-registry-prometheus这个依赖, Spring Boot使用 Micrometer ,一个应用 metrics 组件,将 actuator metrics 整合到外部监控系统中。

它支持很多种监控系统,比如Netflix Atalas, AWS Cloudwatch, Datadog, InfluxData, SignalFx, Graphite, Wavefront和Prometheus等。

这时只需要在 application 配置文件中添加如下端口配置,即可对外暴露 JVM 指标。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management:
  health:
    db:
      enabled: false
  server:
    port: 8080
  endpoint:
    web:
      exposure:
        include: '*'
        exclude: env
    health:
      show-details: always
    shutdown:
      enabled: false
  metrics:
    tags:
      application: ${spring.application.name}

agent 方式执行

下载 Java JMX Jar https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.15.0/jmx_prometheus_javaagent-0.15.0.jar并将下载的 .jar 文件放在类路径中,具体路径可以自己设计,比如打到镜像特定路径下,或者放到 tomcat 服务指定路径下。

为您的应用程序配置 Config.yaml 文件

将 Jar 作为 Java 代理运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java $JAVA_OPTS -javaagent:./jmx_prometheus_javaagent-0.13.0.jar=8080:config.yaml -Xlog:gc=debug:file=gc.txt -DApp.config.file=application.properties -cp "orderauditservice.jar: *” org.springframework.boot.loader.JarLauncher

具体如何采集除 JVM 之外的指标,请参考:https://github.com/prometheus/client_java

访问指标

现在可以通过http://localhost:8080/metrics访问指标

grafana可配置指标

使用 Prometheus 指标准备示例 Grafana 仪表盘,我们可以获取到已经抓取到的指标, springboot 提供了如下指标可用于grafana展示使用。

  • JVM
  1. jvm.memory.max JVM最大内存
  2. jvm.memory.committed JVM可用内存 是 展示并监控堆内存和Metaspace 重要
  3. jvm.memory.used JVM已用内存 是 展示并监控堆内存和Metaspace 重要
  4. jvm.buffer.memory.used JVM缓冲区已用内存
  5. jvm.buffer.count 当前缓冲区数
  6. jvm.threads.daemon JVM守护线程数 是 显示在监控页面
  7. jvm.threads.live JVM当前活跃线程数 是 显示在监控页面;监控达到阈值时报警
  8. jvm.threads.peak JVM峰值线程数 是 显示在监控页面
  9. jvm.classes.loaded 加载classes数
  10. jvm.classes.unloaded 未加载的classes数
  11. jvm.gc.memory.allocated GC时,年轻代分配的内存空间
  12. jvm.gc.memory.promoted GC时,老年代分配的内存空间
  13. jvm.gc.max.data.size GC时,老年代的最大内存空间
  14. jvm.gc.live.data.size FullGC时,老年代的内存空间
  15. jvm.gc.pause GC耗时 是 显示在监控页面
  • TOMCAT
  1. tomcat.sessions.created tomcat已创建session数
  2. tomcat.sessions.expired tomcat已过期session数
  3. tomcat.sessions.active.current tomcat活跃session数
  4. tomcat.sessions.active.max tomcat最多活跃session数 是 显示在监控页面,超过阈值可报警或者进行动态扩容 重要
  5. tomcat.sessions.alive.max.second tomcat最多活跃session数持续时间
  6. tomcat.sessions.rejected 超过session最大配置后,拒绝的session个数 是 显示在监控页面,方便分析问题
  7. tomcat.global.error 错误总数 是 显示在监控页面,方便分析问题
  8. tomcat.global.sent 发送的字节数
  9. tomcat.global.request.max request最长时间
  10. tomcat.global.request 全局request次数和时间
  11. tomcat.global.received 全局received次数和时间
  12. tomcat.servlet.request servlet的请求次数和时间
  13. tomcat.servlet.error servlet发生错误总数
  14. tomcat.servlet.request.max servlet请求最长时间
  15. tomcat.threads.busy tomcat繁忙线程 是 显示在监控页面,据此检查是否有线程夯住
  16. tomcat.threads.current tomcat当前线程数(包括守护线程) 是 显示在监控页面 重要
  17. tomcat.threads.config.max tomcat配置的线程最大数 是 显示在监控页面 重要
  18. tomcat.cache.access tomcat读取缓存次数
  19. tomcat.cache.hit tomcat缓存命中次数
  • CPU
  1. system.cpu.count CPU数量
  2. system.load.average.1m load average 是 超过阈值报警 重要
  3. system.cpu.usage 系统CPU使用率
  4. process.cpu.usage 当前进程CPU使用率 是 超过阈值报警
  5. http.server.requests http请求调用情况 是 显示10个请求量最大,耗时最长的URL;统计非200的请求量 重要
  6. process.uptime 应用已运行时间 是 显示在监控页面
  7. process.files.max 允许最大句柄数 是 配合当前打开句柄数使用
  8. process.start.time 应用启动时间点 是 显示在监控页面
  9. process.files.open 当前打开句柄数 是 监控文件句柄使用率,超过阈值后报警 重要
堆内存监控

在上图中,您可以看到平均堆使用量、最大堆使用量和最大分配堆内存, 如果您在特定时间观察到堆内存使用量突然激增,您可以将应用程序响应时间与请求数量相关联,并检查峰值是否是由于请求增加或代码自身问题导致。

GC监控

在上图中,您可以看到 min GC Count、max GC Count、min GC Time 和 max GC Time。GC 运行的频率,每次 GC 花费的时间。因此,当 GC 发生过于频繁或收集未引用对象所花费的时间太长时,它会影响您的应用程序的性能。这也可能是内存泄漏的另一个迹象,或者它可能只是意味着应用程序需要更多的堆空间。

Thread 监控

线程始终处于任何应用程序的中心阶段。线程负责服务用户请求。有足够的空闲线程来接受所有用户请求是很重要的。如果您没有足够的线程,这将增加用户请求的等待时间,进而增加应用程序响应时间。当线程需要较长时间来完成用户请求时,它会将引用的对象在堆内存中保存较长时间。这反过来会影响内存空间,并可能导致 OOM 或 GC 问题。

在上图中,您可以看到 Live、Demon 和 Deadlocked 线程数。

在上图中,您可以看到 Blocked、Waiting 和 Timed Waiting 线程计数。

总结

虽然框架已经为我们提供了各种指标,但是配置关键指标的使用仍然是一个复杂的过程,找出那些指标表明正在运行的应用程序的运行状况和性能,并在使用过程中不断优化和调整。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生技术爱好者社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!
  通过前面的介绍我们明白了SpringBoot为什么能够很方便快捷的构建Web应用,那么应用部署上线后的健康问题怎么发现呢?在SpringBoot中给我们提供了Actuator来解决这个问题。
用户4919348
2021/09/08
1.6K0
SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!
Spring Boot Actuator监控使用详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序新视界
2019/11/20
1.9K0
SpringBoot:模块探究之spring-boot-actuator
spring-boot-actuator 模块 是 spring-boot 用来查询或监控项目中各种组件、维度的度量指标(如:环境变量信息、日志级别、SpringBean 信息、组件(Redis、Mq、DB)健康状态)时使所用的模块。
栗筝i
2022/12/15
1.3K0
SpringBoot:模块探究之spring-boot-actuator
Spring Boot 2.X(十六):应用监控之 Spring Boot Actuator 使用及配置
Actuator 是 Spring Boot 提供的对应用系统的自省和监控功能。通过 Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘、内存、CPU等信息,系统的线程、gc、运行状态等等。
朝雾轻寒
2019/11/14
1.9K0
树义带你学 Prometheus(六):Spring Boot Actuator 实现应用监控
前面的例子中,我们学习的都是 Prometheus 自身的内容,即监控的都是机器或者系统层面的指标。那么如果我们需要对 Java 应用做监控,例如:监控 JVM 的信息,监控 Spring Bean 的信息。那我们应该怎么实现呢?
陈树义
2020/10/27
1.7K0
树义带你学 Prometheus(六):Spring Boot Actuator 实现应用监控
用prometheus监控java应用
2. http://192.168.1.208:6060 可以看到metrics的信息。
山行AI
2019/09/05
9.6K1
用prometheus监控java应用
Spring Boot Actuator解析
Actuator 是 SpringBoot 项目中一个非常强大一个功能,有助于对应用程序进行监视和管理,通过 Restful Api 请求来监管、审计、收集应用的运行情况。
Luga Lee
2021/12/09
9950
Spring Boot Actuator解析
聊聊Spring Boot服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!
来源:juejin.im/post/5e2179def265da3e152d2561
芋道源码
2021/09/06
1.7K0
SpringBoot2.0 Actuator 监控参数说明
序号 参数 参数说明 是否监控 监控手段 重要度 --- JVM --- 1 jvm.memory.max JVM最大内存 2 jvm.memory.committed JVM可用内存 是 展示并监控堆内存和Metaspace 重要 3 jvm.memory.used JVM已用内存 是 展示并监控堆内存和Metaspace 重要 4 jvm.buffer.memory.used JVM缓冲区已用内存 5 jvm.buffer.count 当前缓冲区数 6 jvm.threads.d
似水的流年
2021/11/18
9430
Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!
前言 去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上。这不,最近我就被分配了要将我们核心的微服务应用全部监控起来的任务。我们的微服务应用都是SpringBoot 应用,因此就自然而
搜云库技术团队
2020/02/19
9.1K0
Actuator + Prometheus + Grafana搭建微服务监控平台
本文的主要目的是实现微服务的监控,简单了解了上述工具的概念后,我们就来动手实践一下。首先创建一个简单的Spring Boot项目,其主要依赖如下:
端碗吹水
2020/09/23
2.7K0
Actuator + Prometheus + Grafana搭建微服务监控平台
Spring Boot整合 Prometheus
Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。Micrometer 会负责完成与不同监控系统的适配工作。这就使得切换监控系统变得很容易。Micrometer 还支持推送数据到多个不同的监控系统。Micrometer类似日志系统中SLF4J。
BUG弄潮儿
2021/08/13
1.5K0
Springboot2 + Micrometer监控指标详解
导读:springboot2 项目监控服务 ,采用Micormeter度量指标库,帮助我们监控应用程序的度量指标,并将其发送到Prometheus中。监控指标有系统负载、内存使用情况、应用程序的响应时间、吞吐量、错误率等。
Ray刘
2023/03/23
8.5K1
SpringBoot Actuator — 埋点和监控
监控机器环境的性能和业务流程或逻辑等各项数据,并根据这些数据生成对应的指标,那么我们就称为数据埋点。比如我们想知道某个接口调用的 TPS、机器 CPU 的使用率,这些都可以用到数据埋点
晚上没宵夜
2021/11/16
1.4K0
Spring Boot 2.x监控数据可视化(Actuator + Prometheus + Grafana手把手图文教程)
众所周知,Spring Boot有个子项目Spring Boot Actuator,它为应用提供了强大的监控能力。从Spring Boot 2.0开始,Actuator将底层改为Micrometer,提供了更强、更灵活的监控能力。Micrometer是一个监控门面,可以类比成监控界的 Slf4j 。
用户1516716
2019/05/13
2.3K0
Spring Boot 2.x监控数据可视化(Actuator + Prometheus + Grafana手把手图文教程)
Prometheus监控有所思:多标签埋点及Mbean
使用 grafana+prometheus+jmx 作为普通的监控手段,是比较有用的。我之前的文章介绍了相应的实现办法。https://www.cnblogs.com/yougewe/p/11140129.html
烂猪皮
2021/04/02
1.4K0
跟我学Spring Cloud(Finchley版)-03-监控:强大的Spring Boot Actuator
Spring Boot Actuator是Spring Boot官方提供的监控组件。只需为项目添加以下依赖,即可就整合Spring Boot Actuator。
用户1516716
2019/07/10
4100
从 Prometheus 到 OpenTelemetry: 指标监控的演进与实践
在上一篇:从 Dapper 到 OpenTelemetry:分布式追踪的演进之旅我们讲解了 Trace 的一些核心概念:
crossoverJie
2024/06/18
1.1K0
分布式 | 如何为 DBLE 搭建 JVM 指标监控系统
爱可生 DBLE 团队开发成员,主要负责 DBLE 需求开发,故障排查和社区问题解答。
爱可生开源社区
2023/08/18
2650
分布式 | 如何为 DBLE 搭建 JVM 指标监控系统
聊聊springboot2的micrometer
springboot2在spring-boot-actuator中引入了micrometer,对1.x的metrics进行了重构,另外支持对接的监控系统也更加丰富(Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD、Wavefront)。1.x的metrics都有点对齐dropwizard-metrics的味道,而micrometer除了一些基本metrics与dropwizard-metrics相类似外,重点支持了tag。这是一个很重要的信号,标志着老一代的statsd、graphite逐步让步于支持tag的influx以及prometheus。
code4it
2018/09/17
2.2K0
推荐阅读
相关推荐
SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验