热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

介绍尽管Java的性能和底层编译型语言没有太大区别,但您可能仍需要调整(Java虚拟机)JVM性能以满足应用程序的需求。在可扩展性和性能方

介绍

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

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

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

依赖引入


io.prometheussimpleclient0.15.0


io.prometheussimpleclient_hotspot0.15.0


io.prometheussimpleclient_httpserver0.15.0


io.prometheussimpleclient_pushgateway0.15.0

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

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

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

management:health:db:enabled: falseserver:port: 8080endpoint:web:exposure:include: '*'exclude: envhealth:show-details: alwaysshutdown:enabled: falsemetrics: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 文件2791a9aefd7a6be799d77a28bea4d376.png

将 Jar 作为 Java 代理运行

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访问指标

6bade638821a95b61de88c876972ed60.png

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 当前打开句柄数 是 监控文件句柄使用率,超过阈值后报警 重要

堆内存监控

39a59b61a989cffd6f38f710d738d3b5.png507cc501be32f7be06a63e7ad23e5b52.png7ba56811894fa63f3ee67b5909a8a9ef.png

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

GC监控

ca82ed90cec1fc3ad0d78de67a15ad39.png

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

Thread 监控

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

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

a8c023b39d427dcd8adca79e4eabc2bb.png

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

总结

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

ce9c71895e3693a835454cd0a86cd40c.png

推荐

使用 Promethues 监控的一些实践

顶级的Kubernetes日志监控工具


原创不易,随手关注或者”在看“,诚挚感谢!


推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
author-avatar
mobiledu2502910157
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有