当前位置: 首页 > article >正文

基于Grafana+Prometheus+Micrometer的JVM性能监控实战指南

1. 为什么需要JVM性能监控系统第一次线上服务崩溃的经历让我记忆犹新。那天凌晨三点报警电话把我从睡梦中惊醒线上订单服务完全瘫痪。排查了半天才发现是JVM老年代内存泄漏导致Full GC频繁触发最终拖垮了整个系统。如果当时有一套完善的JVM监控系统就能提前发现内存异常增长的趋势避免这次事故。这就是为什么我们需要搭建GrafanaPrometheusMicrometer这套黄金组合。它们分别扮演着Micrometer应用层的指标采集器相当于汽车的传感器Prometheus时序数据库和告警中枢相当于行车电脑Grafana数据可视化平台相当于仪表盘实测下来这套方案有三个突出优势全链路覆盖从JVM内部指标堆内存、线程数到系统资源CPU、磁盘都能监控实时性强默认15秒采集一次数据能捕捉到突发性性能波动零侵入性对业务代码几乎没有影响加个依赖改个配置就能用我经手过的电商、金融项目中90%的JVM问题内存泄漏、线程阻塞、GC异常都能通过这个方案提前预警。下面我会手把手带你搭建这套系统包含我踩过的所有坑和优化技巧。2. Spring Boot应用监控配置2.1 Actuator基础配置Spring Boot自带的Actuator模块是监控系统的起点。最近在给一家物流公司做监控升级时发现他们还在用1.x版本的配置方式导致很多关键指标缺失。这里分享正确的新版配置!-- pom.xml必须包含这两个依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency dependency groupIdio.micrometer/groupId artifactIdmicrometer-registry-prometheus/artifactId /dependency关键的application.yml配置这些参数都是我压测后优化的值management: endpoints: web: exposure: include: * # 暴露所有端点 base-path: /monitor # 自定义路径更安全 endpoint: health: show-details: always prometheus: enabled: true metrics: tags: application: ${spring.application.name} # 重要用于区分不同服务 export: prometheus: step: 15s # 采集间隔配置完成后访问http://localhost:8080/monitor/prometheus你会看到类似这样的输出jvm_memory_used_bytes{areaheap,idPS Survivor Space} 1.5672328E7 jvm_threads_live_threads 42 http_server_requests_seconds_count{methodGET,uri/api/orders,status200} 153避坑指南不要直接用/actuator作为路径容易被扫描工具攻击生产环境建议通过include精细控制暴露的端点如health,info,prometheus如果看到404检查是否漏了micrometer-registry-prometheus依赖2.2 Micrometer高级技巧Micrometer的强大之处在于它能自动收集数十种JVM指标但有些关键指标需要特别关注GC相关指标直接影响系统卡顿jvm_gc_pause_seconds_count{gcG1 Young Generation} jvm_gc_pause_seconds_sum{gcG1 Old Generation}线程状态监控死锁预警jvm_threads_states_threads{stateBLOCKED}HTTP接口性能定位慢请求http_server_requests_seconds_max{uri/api/payment}我常用的自定义指标配置示例Bean MeterRegistryCustomizerMeterRegistry metricsCommonTags() { return registry - registry.config() .commonTags(region, System.getenv(AWS_REGION)) // 区分部署区域 .commonTags(instance, hostname); // 标识实例 } // 自定义业务指标 Counter orderCounter Metrics.counter(order.count, type, vip); orderCounter.increment();3. Prometheus数据采集实战3.1 安装与基础配置Prometheus的安装其实很简单但配置中有很多经验性的参数需要调整。这是我优化过的prometheus.yml配置global: scrape_interval: 15s # 抓取频率 evaluation_interval: 15s # 规则评估频率 scrape_configs: - job_name: java-apps metrics_path: /monitor/prometheus scrape_interval: 10s # JVM监控需要更高频率 static_configs: - targets: [app1:8080, app2:8080] labels: env: prod tier: backend - job_name: node static_configs: - targets: [192.168.1.100:9100]启动命令建议用nohup生产环境建议用systemdnohup ./prometheus \ --config.fileprometheus.yml \ --web.listen-address0.0.0.0:9090 \ --storage.tsdb.retention.time30d \ prometheus.log 21 关键参数说明storage.tsdb.retention.time数据保留时间默认15天--web.enable-lifecycle支持热重载配置发POST到/-/reloadscrape_timeout建议设置为scrape_interval的2/33.2 告警规则配置在prometheus.yml同目录下创建alert.rules.ymlgroups: - name: jvm-alerts rules: - alert: HighHeapUsage expr: sum(jvm_memory_used_bytes{areaheap}) by (instance) / sum(jvm_memory_max_bytes{areaheap}) by (instance) 0.85 for: 5m labels: severity: warning annotations: summary: High heap usage on {{ $labels.instance }} description: Heap usage is {{ $value }}% - alert: GCTooFrequent expr: increase(jvm_gc_pause_seconds_count[1m]) 10 for: 10m labels: severity: critical加载规则文件需要在prometheus.yml中添加rule_files: - alert.rules.yml实用告警规则线程数突增jvm_threads_live_threads 500HTTP错误率sum(rate(http_server_requests_seconds_count{status~5..}[1m])) by (uri) / sum(rate(http_server_requests_seconds_count[1m])) by (uri) 0.01系统负载node_load5 / count(count(node_cpu_seconds_total{modesystem}) by (cpu)) 24. Grafana可视化搭建4.1 安装与数据源配置用Docker安装Grafana是最佳实践docker run -d \ -p 3000:3000 \ --namegrafana \ -v /data/grafana:/var/lib/grafana \ grafana/grafana:9.0.0配置Prometheus数据源时要注意URL填写http://prometheus:9090如果是容器需要配置网络开启Scrape interval覆盖设置为15s添加Custom HTTP Header进行鉴权如Authorization: Bearer xxx4.2 仪表盘配置技巧直接导入现成模板固然方便但定制化才能发挥最大价值。分享我的JVM监控面板配置要点核心图表配置内存池使用率sum(jvm_memory_used_bytes{area~heap|nonheap}) by (area) / sum(jvm_memory_max_bytes{area~heap|nonheap}) by (area)显示为Time seriesY轴格式设为0-100%添加阈值线85%警告95%危险GC暂停时间热力图histogram_quantile(0.95, sum(rate(jvm_gc_pause_seconds_bucket[1m])) by (le, gc))显示为Heatmap按GC类型分桶线程状态堆叠图sum(jvm_threads_states_threads) by (state)显示为Stacked bar重点关注BLOCKED状态布局优化技巧将关键指标放在顶部用Stat图表使用Row分割不同维度的监控添加Annotation标记部署事件设置Variables实现服务切换如${app}变量5. 生产环境优化方案5.1 性能调优参数在高负载场景下实测QPS5000需要调整这些参数Prometheus调优global: scrape_interval: 30s # 降低采集频率 storage: tsdb: wal_compression: true # 启用WAL压缩 max_block_chunk_segment_size: 512MBGrafana优化开启rendering_server使用外部渲染服务配置[dashboards] min_refresh_interval 30s使用GF_DATABASE_MAX_IDLE_CONN10减少数据库连接5.2 高可用方案对于关键业务系统建议部署多实例Prometheus联邦集群scrape_configs: - job_name: federate scrape_interval: 1m honor_labels: true metrics_path: /federate params: match[]: - {jobjava-apps} static_configs: - targets: - prometheus-01:9090 - prometheus-02:9090Grafana多数据源配置多个Prometheus实例为不同数据源使用--config参数指定不同环境的配置5.3 安全防护措施基础安全为Prometheus和Grafana启用HTTPS配置basic_auth或OAuth2.0认证限制/monitor端点的IP访问敏感数据过滤MeterFilter denyTags(String... tagKeys) { return MeterFilter.deny(id - { for (String tagKey : tagKeys) { if (id.getTag(tagKey) ! null) { return true; } } return false; }); }这套方案在多个千万级用户的产品中验证过稳定性。最近帮一个短视频平台优化后他们的GC问题排查时间从平均4小时缩短到15分钟。监控系统就像开发者的眼睛越早搭建收益越大。

相关文章:

基于Grafana+Prometheus+Micrometer的JVM性能监控实战指南

1. 为什么需要JVM性能监控系统? 第一次线上服务崩溃的经历让我记忆犹新。那天凌晨三点,报警电话把我从睡梦中惊醒,线上订单服务完全瘫痪。排查了半天才发现是JVM老年代内存泄漏导致Full GC频繁触发,最终拖垮了整个系统。如果当时有…...

2026最权威的AI论文方案推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术写作以及内容创作范畴,原创性要求愈发严格,降重网站成辅助用户…...

避坑指南:VS2022配置IMSL Fortran库时常见的路径错误与权限问题(附64位系统专属解决方案)

VS2022配置IMSL Fortran库实战:64位系统避坑手册 当Fortran遇上IMSL数学库,就像给老式赛车装上涡轮增压——计算性能直接起飞。但不少工程师在Visual Studio 2022环境中配置这套"黄金组合"时,总会被各种路径错误和权限问题绊住脚步…...

《数论探微:进阶版》(Arithmetic Tales: Advanced Edition)俗

一、核心问题及解决方案(按踩坑频率排序) 问题 1:误删他人持有锁——最基础也最易犯的漏洞 成因:释放锁时未做身份校验,直接执行 DEL 命令删除键。典型场景:服务 A 持有锁后,业务逻辑耗时超过锁…...

成本降70%!清华、阿里通义带来智能体长程任务新解法

AI智能体面对需要多轮搜索与推理的复杂长程任务时,经常会上下文超载,出现遗忘或推理崩溃,这是当前制约AI发展的一大瓶颈。全世界都在想办法解决AI智能体的长程记忆问题。清华大学与阿里巴巴通义实验室的研究人员提出了新解法。他们提出了自我…...

C# 面试高频题:装箱和拆箱是如何影响性能的?拇

OCP原则 ocp指开闭原则,对扩展开放,对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则(DIP) 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程, 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...

WRF-Hydro在Ubuntu 22.04 LTS上的系统化部署与编译实战

1. 环境准备与系统配置 在开始WRF-Hydro的部署之前,我们需要确保Ubuntu 22.04 LTS系统已经做好了充分准备。我建议使用全新的系统环境,这样可以避免各种依赖冲突问题。实测下来,干净的Ubuntu系统是最稳定的选择。 首先更新系统软件包&#xf…...

OpenHarmony LiteOS-M Shell 命令开发指南

概述 本文档详细介绍如何在 OpenHarmony LiteOS-M 内核中添加自定义 shell 命令,以 version、reboot、poweroff 命令为例进行说明。 目录结构 kernel/liteos_m/components/shell/ ├── include/shcmd.h # 命令声明头文件 ├── src/base/shcmd.c …...

5分钟快速上手:用Python高效下载Google卫星地图的终极指南

5分钟快速上手:用Python高效下载Google卫星地图的终极指南 【免费下载链接】google-map-downloader Small tools to download Google maps satellite image for a given extent & zoom level to a TIFF file with geographical coordinates and speeding it up …...

免费实时空气质量API接口:一站式获取AQI+PM2.5+NO2+CO+O3+SO2+PM10数据

1. 空气质量API接口的价值与应用场景 空气质量数据对现代生活的重要性不言而喻。无论是个人健康管理、企业决策还是政府监管,实时准确的空气质量信息都发挥着关键作用。作为一个开发者,我曾经在多个项目中需要集成空气质量数据,但市面上的商业…...

遥感数字图像处理教程【2.1】

2 . 非线性拉伸使用非线性拉伸函数对图像进行拉伸变化,即为非线性拉伸。常用的非线性函数有指数函数、对数函数、平 方 根 、高斯函数等。1)指数变换对于图像中亮的部分,指数变换扩大了灰度间隔,突出了细节;对于暗的部…...

C语言完美演绎7-15

/* 范例&#xff1a;7-15 */#include <string.h>#include <stdio.h>void main(void){/* 定义参数dest的字符数组destination[25] */char destination[25];/* 定义参数scr的字符指针scr1、scr2、scr3 */char *scr1 "tiger" , *scr2 " is", *sc…...

Flutter导航与路由详解

Flutter导航与路由详解 什么是Flutter导航与路由&#xff1f; 在Flutter应用中&#xff0c;导航与路由是指在不同页面之间切换的机制。Flutter提供了一套完整的导航系统&#xff0c;包括基本的页面跳转、命名路由、参数传递、路由动画等功能。 基本导航 1. 使用Navigator.p…...

AIAgent学习机制失效诊断手册(工业级Agent训练失败率下降73%的实证模型)

第一章&#xff1a;AIAgent学习机制失效诊断手册&#xff08;工业级Agent训练失败率下降73%的实证模型&#xff09; 2026奇点智能技术大会(https://ml-summit.org) AI Agent在真实产线中常因隐性学习机制退化导致训练失败——并非梯度爆炸或数据缺失&#xff0c;而是目标函数与…...

CSS Grid布局详解与实战应用

CSS Grid布局详解与实战应用 什么是CSS Grid布局&#xff1f; CSS Grid布局是一种二维布局系统&#xff0c;允许我们同时控制行和列的布局&#xff0c;为网页设计提供了更灵活的布局方案。与Flexbox的一维布局不同&#xff0c;Grid布局可以同时处理行和列&#xff0c;非常适合创…...

QuickTime Player录屏声音不全?试试这招!Soundflower+麦克风双轨录制教程

Mac双轨高清录屏终极方案&#xff1a;Soundflower与BlackHole实战指南 每次用QuickTime录制教程视频时&#xff0c;系统声音和麦克风解说总是无法完美同步&#xff1f;这个问题困扰着无数内容创作者。作为一位长期使用Mac进行音乐制作和视频教程录制的资深用户&#xff0c;我深…...

MedGemma 1.5医疗AI助手:基于Linux系统的部署与优化

MedGemma 1.5医疗AI助手&#xff1a;基于Linux系统的部署与优化 1. 引言 医疗AI正在改变传统的诊疗方式&#xff0c;但很多医疗机构面临数据隐私和网络安全的挑战。MedGemma 1.5作为谷歌开源的医疗多模态模型&#xff0c;提供了完全本地化部署的解决方案&#xff0c;让医院和…...

生产环境离线部署大模型

一、普通服务器升级ai服务器 1、服务器插槽装载8张INVIDA RTX 4090的显卡(单显卡48GB) 2、在INVIDA官网下载安装NVIDIA驱动NVIDIA-Linux-x86_64-550.120.run //服务器上禁用开源驱动 nouveau echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau…...

OV2640寄存器配置黑魔法:手把手教你用ESP32-S3调出专业级画质

OV2640寄存器配置黑魔法&#xff1a;手把手教你用ESP32-S3调出专业级画质 在嵌入式视觉领域&#xff0c;OV2640这颗200万像素的图像传感器堪称常青树。它价格亲民、资料丰富&#xff0c;但想要榨干它的性能潜力&#xff0c;却需要深入理解其寄存器配置的奥秘。本文将带你从ISP底…...

机器学习与深度学习的区别是什么?看这一篇就够了

机器学习与深度学习的区别是什么&#xff1f;看这一篇就够了 标签&#xff1a;#机器学习、#深度学习、#人工智能、#计算机视觉、#自然语言处理、#数据分析、#ai### 一、企业招聘角度拆解&#xff1a;机器学习 vs 深度学习&#xff0c;岗位、要求、薪资、需求量### 二、对比学习…...

从ESP8266到ESP32-C6:一文看懂乐鑫芯片的‘家族进化史’与背后的物联网十年

从ESP8266到ESP32-C6&#xff1a;解码乐鑫芯片的十年物联网战略布局 2014年&#xff0c;一款售价仅3美元的Wi-Fi芯片悄然问世&#xff0c;谁也没想到这颗名为ESP8266的小芯片会彻底改变物联网行业的游戏规则。当时市面上的Wi-Fi模块价格普遍在10美元以上&#xff0c;且需要外接…...

面了个新人连Agent如何进行冷启动都不知道

一、产品侧&#xff1a;先做「精准小功能」&#xff0c;不做“万金油” ❌ 拒绝做一个什么都懂但都不准的Agent ✅ 核心逻辑&#xff1a;场景收窄 知识聚焦 人工兜底 1.只攻一个垂直场景 ToB方向&#xff1a;比如“合同审核Agent”. “电商售后Agent”&#xff0c;场景越…...

从洗碗到叠衣:用RECAP算法让机器人学会‘吃一堑长一智’

从洗碗到叠衣&#xff1a;用RECAP算法让机器人学会“吃一堑长一智” 想象一下&#xff0c;你刚教会家里的机器人如何叠衣服。第一次尝试时&#xff0c;它把袖子塞进了衣领里&#xff1b;第二次&#xff0c;衣服直接掉在了地上&#xff1b;第三次&#xff0c;它终于叠好了——但…...

为什么你的网络总抽风?可能是这个ARP协议漏洞在捣鬼(含防御方案)

为什么你的网络总抽风&#xff1f;可能是这个ARP协议漏洞在捣鬼&#xff08;含防御方案&#xff09; 想象一下这样的场景&#xff1a;你正在视频会议中发言&#xff0c;突然画面卡顿、声音断断续续&#xff1b;或者游戏激战正酣时&#xff0c;角色突然掉线。这些恼人的网络&quo…...

Phi-3-mini-128k-instruct代码解释能力实测:逆向工程与文档生成

Phi-3-mini-128k-instruct代码解释能力实测&#xff1a;逆向工程与文档生成 最近在尝试一些新的代码辅助工具&#xff0c;发现微软开源的Phi-3-mini-128k-instruct模型挺有意思。它主打轻量化和指令跟随&#xff0c;特别是那个128k的超长上下文&#xff0c;理论上能塞进去不少代…...

为什么92%的SITS2026项目在Phase 2失败?——多Agent角色编排、任务分解与状态同步的黄金三角模型,

第一章&#xff1a;SITS2026深度解析&#xff1a;多Agent协作系统设计 2026奇点智能技术大会(https://ml-summit.org) SITS2026&#xff08;Scalable Intelligent Task Synthesis 2026&#xff09;是一个面向开放域复杂任务的多Agent协作框架&#xff0c;其核心设计理念是“角…...

YOLOv7实战指南:如何实现高精度与实时性的多任务目标检测

1. YOLOv7为什么能成为工业级目标检测的首选&#xff1f; 第一次接触YOLOv7是在去年做一个智能质检项目时&#xff0c;当时测试了YOLOv5、YOLOv7和YOLOv8三个版本。结果发现YOLOv7在检测微小电子元件缺陷时&#xff0c;准确率比v5高出12%&#xff0c;推理速度却比v8还要快15%。…...

AIAgent自动驾驶到底靠不靠谱?2026奇点大会127项实测数据揭示L4级商用真相

第一章&#xff1a;AIAgent自动驾驶的范式革命与奇点大会背景 2026奇点智能技术大会(https://ml-summit.org) 传统自动驾驶系统长期依赖模块化流水线设计——感知、定位、规划、控制被严格解耦&#xff0c;各模块由独立模型驱动&#xff0c;通过手工定义接口传递确定性信号。…...

揭秘Reward Hacking真相:为什么90%的AI Agent在训练后期崩溃?

第一章&#xff1a;Reward Hacking的本质与系统性风险 2026奇点智能技术大会(https://ml-summit.org) Reward hacking 是强化学习系统在优化目标函数过程中&#xff0c;绕过设计者真实意图、利用奖励函数漏洞获取高分的非预期行为。它并非偶然错误&#xff0c;而是智能体在目…...

AIAgent协议一致性危机爆发前夜:4步诊断法+3类协议健康度SLI指标(P99延迟、语义丢失率、Schema漂移频次),立即自查你的Agent集群

第一章&#xff1a;AIAgent架构中的通信协议设计 2026奇点智能技术大会(https://ml-summit.org) 在多智能体协同系统中&#xff0c;通信协议是决定Agent间语义对齐、时序可控与容错能力的核心基础设施。不同于传统微服务间RESTful或gRPC调用&#xff0c;AIAgent需支持异步事件…...