🎯 JVM Prometheus Monitor
一个基于 Prometheus 的 JVM 监控工具,提供实时、可视化的 JVM 性能监控和健康分析功能。
📑 目录
- 功能特性
- 快速开始
- 配置说明
- 监控指标详解
- 健康分析功能
- GC 类型支持
- 常见问题
- 最佳实践
✨ 功能特性
📊 实时监控
每 5 秒自动刷新,支持暂停/继续,实时查看 JVM 各项指标变化趋势。
🎨 可视化图表
15+ 个独立图表,包括堆内存、非堆内存、GC、CPU、线程等,支持鼠标悬浮查看详情。
🔍 健康分析
自动分析 JVM 健康状态,识别潜在风险,提供优化建议。
🔄 多 GC 支持
自动识别 G1、Parallel、CMS、Serial 等 GC 类型,提供针对性分析。
⚙️ 灵活配置
支持自定义服务地址、Metrics 路径、认证 Header,配置自动保存。
📱 响应式设计
Grafana 风格暗色主题,适配各种屏幕尺寸,支持移动端访问。
🚀 快速开始
1. 前置条件
- 目标应用已集成 Spring Boot Actuator 或 Prometheus 客户端
- 目标应用暴露了
/metrics或/actuator/prometheus端点 - 现代浏览器(Chrome、Firefox、Safari、Edge)
2. 启动监控
- 打开
index.html文件(直接双击或用浏览器打开) - 点击右上角⚙️ 配置按钮
- 填写配置信息:
- 服务地址:例如
http://your-service:8080 - Metrics 路径:默认
/metrics,Spring Boot 应用通常是/actuator/prometheus - 请求头:如果需要认证,填写 JSON 格式的 Header,例如:
{"refresh-token": "***"}
- 服务地址:例如
- 点击连接服务按钮
- 开始监控!
💡 提示:配置会自动保存到浏览器本地存储,下次打开无需重新配置。
⚙️ 配置说明
基础配置
| 配置项 | 说明 | 示例 |
|---|---|---|
| 服务地址 | 目标应用的完整 URL(协议+域名+端口) | http://test-service.example.com:8080 |
| Metrics 路径 | Prometheus 指标暴露的路径 | /metrics或/actuator/prometheus |
| 请求头 | JSON 格式的 HTTP 请求头(用于认证) | {"Authorization": "Bearer ***"} |
Spring Boot 应用配置
如果目标应用是 Spring Boot,需要确保已添加 Actuator 依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>在application.yml中启用 Prometheus 端点:
management: endpoints: web: exposure: include: prometheus,health,info metrics: export: prometheus: enabled: true📊 监控指标详解
堆内存监控
| 指标 | 说明 | 关注点 |
|---|---|---|
| Eden 区 | 新对象分配区域 | 频繁 Minor GC 可能导致 Eden 快速回收 |
| Survivor 区 | 存活对象暂存区 | 使用率过高可能导致对象提前晋升 |
| Old Gen | 长期存活对象 | 持续增长可能表示内存泄漏 |
非堆内存监控
| 指标 | 说明 | 关注点 |
|---|---|---|
| Metaspace | 类元数据存储区 | 持续增长可能表示类加载泄漏 |
| Code Cache | JIT 编译代码缓存 | 满了会影响性能 |
| Compressed Class Space | 压缩类指针空间 | 通常不需要特别关注 |
GC 监控
| 指标 | 说明 | 正常范围 |
|---|---|---|
| Minor GC 频率 | Young GC 次数/小时 | < 100 次/小时 |
| Full GC 频率 | Full GC 次数/小时 | < 1 次/小时 |
| GC 暂停时间 | 单次 GC 暂停毫秒数 | < 200ms |
系统资源监控
| 指标 | 说明 | 关注点 |
|---|---|---|
| CPU 使用率 | 进程和系统 CPU 占用 | 持续 > 80% 需要关注 |
| 线程数 | 活跃线程、阻塞线程等 | 阻塞线程过多可能表示锁竞争 |
🔍 健康分析功能
点击页面右上角的🔍 分析按钮,系统会自动分析当前 JVM 状态并生成健康报告。
分析维度
- 堆内存使用率:评估堆内存是否充足
- 各区域使用率:Eden、Survivor、Old Gen 的使用情况
- 非堆内存:Metaspace、Code Cache 使用情况
- GC 频率和耗时:评估 GC 是否过于频繁
- CPU 使用率:评估 CPU 资源是否充足
- 线程状态:检查是否有过多阻塞线程
- 文件描述符:检查 FD 使用率
风险等级
| 等级 | 颜色 | 说明 |
|---|---|---|
| 正常 | 🟢 绿色 | 指标在安全范围内 |
| 警告 | 🟡 黄色 | 指标接近阈值,需要关注 |
| 严重 | 🔴 红色 | 指标超过阈值,需要立即处理 |
阈值标准
| 指标 | 警告阈值 | 严重阈值 |
|---|---|---|
| 堆内存使用率 | > 70% | > 85% |
| Old Gen 使用率 | > 60% | > 80% |
| Survivor 使用率 | > 90% | - |
| Metaspace 使用率 | > 80% | > 90% |
| Full GC 频率 | > 0.1 次/小时 | > 1 次/小时 |
| CPU 使用率 | > 60% | > 80% |
| 阻塞线程数 | > 10 | - |
🔄 GC 类型支持
系统会自动识别以下 GC 类型,并提供针对性的分析:
G1 GC
- 特点:面向服务端应用,可预测的停顿时间
- 内存区域:Eden、Survivor、Old Gen(Region 化)
- GC 类型:Young GC、Mixed GC、Full GC
- 分析重点:Old Gen 使用率、Mixed GC 频率
Parallel GC(默认)
- 特点:吞吐量优先,多线程并行回收
- 内存区域:PS Eden、PS Survivor、PS Old Gen
- GC 类型:Minor GC、Major GC
- 分析重点:Survivor 使用率(自适应策略)、Full GC 频率
CMS GC
- 特点:低延迟,并发标记清除
- 内存区域:Par Eden、Par Survivor、CMS Old Gen
- GC 类型:Minor GC、Concurrent Mark-Sweep
- 分析重点:Old Gen 碎片化、Concurrent Mode Failure
Serial GC
- 特点:单线程,适合客户端应用
- 内存区域:Eden、Survivor、Tenured Gen
- GC 类型:Minor GC、Major GC
- 分析重点:GC 暂停时间
❓ 常见问题
Q1: 为什么连接服务失败?
可能原因:
- 服务地址或端口错误
- Metrics 路径不正确(Spring Boot 应用通常是
/actuator/prometheus) - 需要认证但未提供正确的 Header
- CORS 跨域问题(目标服务未配置允许跨域)
Q2: 为什么某些图表没有数据?
可能原因:
- 目标应用未暴露相应的 Prometheus 指标
- 应用刚启动,还没有产生 GC 或 HTTP 请求
- 指标名称与预期不同(不同 GC 类型的指标名称不同)
Q3: Survivor 区使用率很高,正常吗?
答案:取决于 GC 类型和配置。
- Parallel GC:启用自适应策略时,Survivor 会自动调整大小,高使用率可能是正常的
- G1 GC:Survivor 使用率高可能导致对象提前晋升,需要关注
- 建议:查看健康分析报告,系统会根据 GC 类型给出针对性建议
Q4: Full GC 频繁怎么办?
排查步骤:
- 检查 Old Gen 使用率是否持续增长(可能内存泄漏)
- 检查 Metaspace 使用率(可能类加载泄漏)
- 增加堆内存:
-Xmx - 调整 GC 参数或切换到 G1 GC
- 使用
jmap、jstat等工具深入分析
Q5: 如何监控多个服务?
当前版本:每个页面只能监控一个服务。
解决方案:
- 打开多个浏览器标签页,每个监控一个服务
- 或者修改代码支持多服务切换(需要开发)
💡 最佳实践
JVM 参数推荐配置
G1 GC(推荐,堆内存 > 4GB)
-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=4m -XX:InitiatingHeapOccupancyPercent=45 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512mParallel GC(堆内存 < 4GB)
-Xms2g -Xmx2g -XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:+UseAdaptiveSizePolicy -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m监控建议
- 定期检查健康分析报告:每天至少查看一次,及时发现潜在问题
- 关注趋势而非瞬时值:观察图表的变化趋势,而不是某个时间点的值
- 设置告警阈值:根据业务特点设置合理的告警阈值
- 结合日志分析:GC 日志、应用日志结合分析,快速定位问题
- 压测验证:在测试环境进行压测,观察 JVM 各项指标的表现
性能优化方向
- 减少 GC 频率:优化对象创建,减少短命对象
- 降低 GC 暂停:调整 GC 参数,选择合适的 GC 类型
- 避免内存泄漏:及时释放不再使用的资源,注意集合类的清理
- 优化线程池:合理配置线程池大小,避免过多线程竞争
- 监控 Metaspace:避免类加载泄漏,特别是动态加载类的场景
JVM Prometheus Monitor- 让 JVM 监控更简单、更直观
版本:1.0.0 | 最后更新:2026-08-13