Springboot 监控篇

在 Spring Boot 中实现 JVM 在线监控(包括线程曲线、内存使用、GC 情况等),最常用的方案是结合 Spring Boot Actuator + Micrometer + 监控可视化工具(如 Grafana、Prometheus)。以下是完整实现方案:

一、核心依赖与配置

1. 添加 Maven 依赖

xml

<!-- Spring Boot Actuator:提供监控端点 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency><!-- Micrometer: metrics 收集工具,适配多种监控系统 -->
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency><!-- 可选:如果需要简单的可视化界面,可添加 spring-boot-admin -->
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>3.2.1</version> <!-- 与 Spring Boot 版本匹配 -->
</dependency>
2. 配置 application.yml

yaml

# 暴露监控端点
management:endpoints:web:exposure:include: health,info,prometheus,metrics,threaddump,heapdump  # 暴露的端点metrics:export:prometheus:enabled: true  # 启用 Prometheus 导出endpoint:health:show-details: always  # 显示健康详情threaddump:enabled: true  # 启用线程 dump 端点heapdump:enabled: true  # 启用堆 dump 端点# 可选:Spring Boot Admin 配置(如果使用)
spring:boot:admin:client:url: http://localhost:8080  # Spring Boot Admin 服务端地址application:name: jvm-monitor-demo  # 应用名称,用于监控面板识别

二、关键监控端点说明

通过 Actuator 暴露的端点,可以直接获取监控数据:

  1. /actuator/prometheus:以 Prometheus 格式暴露 metrics 数据(供可视化工具抓取)
  2. /actuator/metrics:查看所有可监控的指标(如 jvm.threads.livejvm.memory.used
  3. /actuator/metrics/jvm.threads.live:查看当前活跃线程数
  4. /actuator/threaddump:获取线程 dump 信息(用于排查线程阻塞)
  5. /actuator/heapdump:下载堆 dump 文件(用于分析内存泄漏)

三、可视化监控方案

方案 1:Prometheus + Grafana(推荐)
1. 部署 Prometheus
  • 下载 Prometheus 并配置 prometheus.yml

    yaml

    scrape_configs:- job_name: 'spring-boot-app'metrics_path: '/actuator/prometheus'scrape_interval: 5s  # 每 5 秒抓取一次static_configs:- targets: ['localhost:8080']  # 你的 Spring Boot 应用地址
    
  • 启动 Prometheus:./prometheus --config.file=prometheus.yml
2. 部署 Grafana 并配置面板
  • 下载并启动 Grafana,访问 http://localhost:3000(默认账号 admin/admin)
  • 添加 Prometheus 数据源(URL:http://localhost:9090
  • 导入 JVM 监控面板:
    • 访问 Grafana Dashboards,搜索 JVM Micrometer(推荐 ID:4701)
    • 导入面板后即可看到:
      • 线程数曲线(活跃线程、守护线程、峰值线程)
      • 内存使用曲线(堆内存、非堆内存、各代内存)
      • GC 次数与耗时曲线
      • 类加载统计等
方案 2:Spring Boot Admin(轻量级可视化)
1. 部署 Spring Boot Admin 服务端

创建一个单独的 Spring Boot 应用作为 Admin 服务端:

xml

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>3.2.1</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

启动类添加注解:

java

运行

@SpringBootApplication
@EnableAdminServer
public class AdminServerApplication {public static void main(String[] args) {SpringApplication.run(AdminServerApplication.class, args);}
}
2. 查看监控面板

访问 Admin 服务端地址(http://localhost:8080),可看到:

  • 应用概览(健康状态、内存使用)
  • 详细监控页:
    • 线程标签页:线程数趋势图、线程状态分布
    • JVM 标签页:内存、GC、类加载监控
    • 环境标签页:系统属性、配置信息

四、自定义监控指标(可选)

如果需要监控业务指标(如自定义线程池状态),可通过 Micrometer 手动埋点:

java

运行

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Component
public class CustomMetrics {private final MeterRegistry meterRegistry;private Counter taskCounter;public CustomMetrics(MeterRegistry meterRegistry) {this.meterRegistry = meterRegistry;}@PostConstructpublic void init() {// 初始化一个任务计数器taskCounter = meterRegistry.counter("custom.task.executed");// 监控自定义线程池状态ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.initialize();meterRegistry.gauge("custom.threadpool.active", executor, ThreadPoolTaskExecutor::getActiveCount);}// 业务中调用此方法计数public void incrementTaskCount() {taskCounter.increment();}
}

五、总结

  • 轻量需求:使用 Spring Boot Admin,快速搭建可视化监控,适合开发 / 测试环境。
  • 生产环境:推荐 Prometheus + Grafana,支持持久化存储、告警配置(如线程数过高时邮件通知)、多维度分析。
  • 核心监控指标:线程数(jvm.threads.live)、内存使用(jvm.memory.used)、GC 耗时(jvm.gc.pause)、CPU 使用率(system.cpu.usage)。

通过以上方案,可实现 JVM 与线程的实时监控和历史趋势分析,便于及时发现性能瓶颈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95260.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 大视界 --Java 大数据在智能教育学习资源整合与知识图谱构建中的深度应用(406)

Java 大视界 --Java 大数据在智能教育学习资源整合与知识图谱构建中的深度应用&#xff08;406&#xff09;引言&#xff1a;正文&#xff1a;一、智能教育的两大核心痛点与 Java 大数据的适配性1.1 资源整合&#xff1a;42% 重复率背后的 “三大堵点”1.2 知识图谱&#xff1a…

2025年新版C语言 模电数电及51单片机Proteus嵌入式开发入门实战系统学习,一整套全齐了再也不用东拼西凑

最近有同学说想系统学习嵌入式&#xff0c;问我有没有系统学习的路线推荐。刚入门的同学可能不知道如何下手&#xff0c;这里一站式安排上。先说下学习的顺序&#xff0c;先学习C语言&#xff0c;接着学习模电数电&#xff08;即模拟电路和数字电路&#xff09;最后学习51单片机…

Android的USB通信 (AOA Android开放配件协议)

USB 主机和配件概览Android 通过 USB 配件和 USB 主机两种模式支持各种 USB 外围设备和 Android USB 配件&#xff08;实现 Android 配件协议的硬件&#xff09;。在 USB 配件模式下&#xff0c;外部 USB 硬件充当 USB 主机。配件示例可能包括机器人控制器、扩展坞、诊断和音乐…

人工智能视频画质增强和修复软件Topaz Video AI v7.1.1最新汉化,自带星光模型

软件介绍 这是一款专业的视频修复工具-topaz video ai&#xff0c;该版本是解压即可使用&#xff0c;自带汉化&#xff0c;免登陆无输出水印。 软件特点 不登录不注册解压即可使用无水印输出视频画质提升 软件使用 选择我们需要提升画质的视频即可 软件下载 夸克 其他网盘…

LeetCode 777.在LR字符串中交换相邻字符

在一个由 ‘L’ , ‘R’ 和 ‘X’ 三个字符组成的字符串&#xff08;例如"RXXLRXRXL"&#xff09;中进行移动操作。一次移动操作指用一个 “LX” 替换一个 “XL”&#xff0c;或者用一个 “XR” 替换一个 “RX”。现给定起始字符串 start 和结束字符串 result&#x…

RK-Android15-WIFI白名单功能实现

实现WIFI白名单功能 。 三个模式: 1、默认模式:允许搜索所有的WIFI显示、搜索出来 ; 2、禁用模式:允许所有WIFI显示,能够搜索出来 ;3、白名单模式:允许指定WIFI名单显示,被搜索出来 文章目录 前言-需求 一、参考资料 二、核心修改文件和实现方式 1、修改文件 疑问思考 …

Maven + JUnit:Java单元测试的坚实组合

Maven JUnit&#xff1a;Java单元测试的坚实组合Maven JUnit&#xff1a;Java单元测试的坚实组合一、什么是软件测试&#xff1f;二、测试的维度&#xff1a;阶段与方法&#xff08;一&#xff09;测试的四大阶段&#xff08;二&#xff09;测试的三大方法三、main方法测试与…

FFMPEG 10BIT下 Intel b570 qsv 硬解AV1,H265视频编码测试

上10bitffmpeg 8.0 b570最新驱动 &#xff0c;CPU 12100F 显卡 Intel b570 ffmpeg -hwaccel_output_format qsv -i "XXX.mkv" -vf "formatp010le" -c:v hevc_qsv -global_quality 19 -quality best -rc_mode ICQ -preset veryslow -g 120 -refs 5 -b…

SQL分类详解:掌握DQL、DML、DDL等数据库语言类型

如果你是一名数据库运维工程师&#xff0c;或者正在学习数据库技术&#xff0c;那么理解SQL的不同类型是非常重要的。让我们一起看看SQL到底有哪些种类&#xff0c;以及它们各自的作用。 1. 什么是SQL&#xff1f; SQL&#xff08;Structured Query Language&#xff09;是一种…

[特殊字符] 预告!我正在开发一款让自动化操作变得「像呼吸一样自然」的AI神器

各位技术爱好者和创作者朋友们&#xff0c;我要解决一个行业痛点&#xff01;在上一个项目中&#xff08;&#x1f525; 重磅预告&#xff01;我要用AI开发一个自媒体神器&#xff0c;彻底解决创作者的7大痛点&#xff01;&#xff09;&#xff0c;我本来雄心勃勃地打算直接用R…

加密软件哪个好用?加密软件-为数据共享提供安全保障

企业与合作伙伴协作时需共享大量数据&#xff0c;若缺乏保护&#xff0c;数据可能被非法获取&#xff0c;影响合作信任&#xff0c;甚至引发商业纠纷。加密软件可确保共享数据仅授权方可见&#xff0c;为数据共享提供安全保障&#xff0c;推动合作顺利开展。​1.固信软件固信加…

FPGA复位

1:能不复位尽量不要复位&#xff0c;减少逻辑扇出数&#xff1a;比如打拍信号。2:xilinx的FPGA推荐高复位&#xff0c;ATERAL的FPGA推荐低复位。3:尽量使用异步复位&#xff1a;大多数厂商目标库内的触发器都只有异步复位端口&#xff0c;采用同步复位需消耗较多逻辑资源。一&a…

Cursor 教我学 Python

文章目录1. 写在最前面2. Python 语法2.1 yield2.1.1 yield 和 return 的区别2.1.2 golang 中实现 yield 语法3. aiohttp 库3.1 原始写法3.2 修改写法3.2 耗时对比分析4. 碎碎念5. 参考资料1. 写在最前面 最近加了很多 Python Coding 的任务&#xff0c;虽然在 AI 加持下能够顺…

Ollama:本地大语言模型部署和使用详解

1.什么是Ollama&#xff1f; Ollama是一个开源的大语言模型管理工具&#xff0c;具有以下特点&#xff1a; 简单易用&#xff1a;提供简单的命令行接口本地部署&#xff1a;模型运行在本地&#xff0c;保护数据隐私跨平台支持&#xff1a;支持Windows、macOS、Linux丰富的模型…

云计算学习100天-第41天 -普罗米修斯2

目录 五、添加被监控端 1、在web1[192.168.88.100]上部署node exporter 2、在Prometheus服务器上添加监控节点 3、浏览器查看添加结果 六、Grafana的部署 概述 部署步骤 七、监控MySQL数据库 1、配置MySQL 2、配置mysql exporter 3、配置prometheus监控mysql 五、添…

集成电路学习:什么是SVM支持向量机

SVM:支持向量机 SVM,即支持向量机(Support Vector Machine),是一种常用的机器学习算法,特别适用于分类和回归问题。以下是对SVM的详细解析: 一、SVM的基本原理 SVM的基本思想是在特征空间中寻找一个最优的超平面,使得不同类别的样本能够被最大化地分开。这个最优…

盲盒抽谷机小程序开发:如何用3D技术重构沉浸式体验?

在盲盒经济中&#xff0c;“沉浸感”是提升用户停留时长与转化率的核心武器。某品牌通过3D扭蛋机旋转、卡牌翻转特效&#xff0c;使用户停留时长从15秒延长至45秒&#xff0c;转化率提升25%&#xff1b;另一品牌上线AR试戴功能后&#xff0c;单次抽谷时长延长至2分钟&#xff0…

集采与反腐双重压力下,医药销售的破局之道:从资源依赖到价值重构

在医药行业进入集采常态化与反腐纵深推进的新阶段&#xff0c;“资源匮乏”“拜访受阻” 成为萦绕在众多医药销售人员心头的难题。当传统的资金投入、学术活动等资源型打法逐渐失效&#xff0c;行业正面临一场从 “资源驱动” 到 “价值驱动” 的深刻变革。那些曾在市场中创造过…

Elasticsearch常用命令(未完)

网上针对es常用命令好多都是写的感觉非常复杂难以理解&#xff0c;所以我还是自己整理了一下相关的常用命令。 对es输入指令可以用很多种方法比如用es的谷歌浏览器插件&#xff0c;亦或者postman&#xff0c;我个人比较喜欢用postman比较简单直接 1.删除指定索引下的所有数据…

【系统架构设计(七)】 需求工程之:面向对象需求分析方法:统一建模语言(UML)(下)

文章目录一、用例图1. 用例模型建立的系统化流程第一步&#xff1a;识别参与者第二步&#xff1a;合并需求获得用例第三步&#xff1a;细化用例描述第四步&#xff1a;调整用例模型&#xff08;可选步骤&#xff09;2. 用例之间的关系类型二、类图与对象图概念类之间的关系三、…