内容
[](https://www.npmjs.com/package/mcp-jvm-diagnostics)
[](https://opensource.org/licenses/MIT)
# MCP JVM 诊断工具
MCP(模型上下文协议)服务器,使 AI 助手能够分析 JVM 线程转储和 GC 日志。它检测死锁,识别锁竞争热点,分析垃圾回收压力,并推荐 JVM 调优参数。
## 为什么使用此工具?
现有的 JVM 诊断 MCP 服务器(TDA、jfr-mcp、Arthas)都是 **基于 Java** 的,需要 JVM 运行时才能诊断 JVM 问题。而此工具通过 `npx` 在 **Node.js** 上运行,无需 JVM、Docker 或 SSH。
它分析 **离线** 工件(线程转储、GC 日志、堆直方图),而无需运行的 JVM。粘贴线程转储或 GC 日志即可获得即时分析。
## 功能
- **6种MCP工具**,用于全面的 JVM 诊断
- **线程转储分析** — 死锁检测、竞争热点、线程状态分析
- **GC 日志分析** — 暂停统计、堆趋势、内存泄漏检测
- **堆直方图分析** — 内存泄漏候选者、类加载器泄漏、终结问题
- **JFR 摘要** — Java Flight Recorder 文件分析
- **统一诊断** — 跨相关线程和 GC 数据
- **支持** G1、ZGC、Parallel、Serial 和 Shenandoah GC 格式
- **无外部依赖** — 支持本地文本输入,无需 API 密钥
## 专业版
**生成可导出的诊断报告(HTML + PDF)**,需购买专业版许可证。
- 完整的 JVM 线程转储分析报告,包含可行的建议
- PDF 导出,方便与团队共享
- 优先支持
**$9.00/月** — [获取专业版许可证](https://buy.stripe.com/PLACEHOLDER)
专业版许可证激活 `generate_report` MCP 工具。
## 安装
```bash
npx mcp-jvm-diagnostics
```
或全局安装:
```bash
npm install -g mcp-jvm-diagnostics
```
## 配置
### Claude 桌面版
添加到 `~/.claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"jvm-diagnostics": {
"command": "npx",
"args": ["-y", "mcp-jvm-diagnostics"]
}
}
}
```
无需环境变量,此工具通过提供的文本输入工作。
## 快速演示
在 Claude 中尝试这些提示(粘贴 JVM 输出):
1. **"分析此线程转储:[粘贴 jstack 输出]"** — 检测死锁、竞争热点和线程状态分析
2. **"分析此 GC 日志:[粘贴 GC 日志]"** — 显示暂停统计、堆趋势和调优建议
3. **"比较这些堆直方图以查找内存泄漏:BEFORE:[粘贴] AFTER:[粘贴]"** — 确定增长的类、类加载器泄漏和终结问题
## 工具
### `analyze_thread_dump`
解析 JVM 线程转储,分析线程状态,检测死锁,识别锁竞争。
**参数:**
- `thread_dump` — 完整的线程转储文本(来自 `jstack <pid>`、`kill -3` 或 VisualVM)
**示例提示:** "分析此线程转储,告诉我是否有死锁"
### `analyze_gc_log`
解析 GC 日志,分析垃圾回收模式、暂停时间和内存压力。
**参数:**
- `gc_log` — GC 日志文本(来自 `-Xlog:gc*` 或 `-verbose:gc`)
**示例提示:** "分析此 GC 日志,告诉我是否有性能问题"
### `analyze_heap_histo`
解析 `jmap -histo` 输出,检测内存泄漏候选者、对象创建热点和类加载器泄漏。
**参数:**
- `histo` — jmap -histo 输出文本(来自 `jmap -histo <pid>` 或 `jmap -histo:live <pid>`)
**示例提示:** "分析此堆直方图,告诉我是否有内存泄漏候选者"
### `diagnose_jvm`
统一的 JVM 诊断,结合线程转储和 GC 日志分析,进行全面的根本原因分析。
**参数:**
- `thread_dump`(可选)— 线程转储文本
- `gc_log`(可选)— GC 日志文本
**示例提示:** "我同时拥有线程转储和 GC 日志 — 诊断问题"
### `compare_heap_histos`
比较两个不同时间点的 `jmap -histo` 快照,检测内存增长模式和泄漏候选者。
**参数:**
- `before` — 第一个(较早的)jmap -histo 输出
- `after` — 第二个(较晚的)jmap -histo 输出
**示例提示:** "比较这两个堆直方图,告诉我增长了什么"
**检测:**
- 类实例/字节计数增长(泄漏候选)
- 新出现的类
- 消失的类(GC 或卸载)
- 整体堆增长速率
- 类加载器泄漏和终结队列增长
## 收集 JVM 诊断信息
### 线程转储
```bash
# 使用 jstack
jstack <pid> > thread-dump.txt
# 使用信号(Linux/Mac)
kill -3 <pid>
# 使用 jcmd
jcmd <pid> Thread.print > thread-dump.txt
```
### GC 日志
在应用程序中添加以下 JVM 标志:
```bash
# Java 9+(统一日志)
-Xlog:gc*:file=gc.log:time,level,tags
# Java 8
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log
```
## 贡献
1. 克隆仓库
2. `npm install`
3. `npm run build`
4. `npm test`
## 限制和已知问题
- **仅限文本输入**:线程转储、GC 日志和堆直方图必须以文本形式提供。服务器无法附加到正在运行的 JVM 或自动捕获数据。
- **Java 9+ GC 日志**:GC 日志解析器针对统一日志格式(`-Xlog:gc*`)进行了优化。旧版 `-verbose:gc` 格式(Java 8)有基本支持,但可能会遗漏某些事件。
- **Shenandoah GC**:有限支持。G1、ZGC、Parallel 和 Serial 完全支持。
- **虚拟线程(Java 21+)**:线程转储解析器处理虚拟线程,但分析建议针对平台线程进行了调整。
- **堆直方图比较**:需要标准的 `jmap -histo` 或 `jcmd GC.class_histogram` 格式。自定义格式或截断输出可能无法正确解析。
- **死锁检测**:检测基于监视器的死锁。如果锁地址在线程转储中不可见,则可能无法检测到 ReentrantLock 死锁。
- **无历史分析**:每次分析都是一个时间点快照。对于趋势分析,请手动比较多个快照。
- **仅限 HotSpot/OpenJDK**:解析器针对 HotSpot/OpenJDK 线程转储格式。GraalVM native-image 或 Eclipse OpenJ9 转储可能无法完全解析。
- **类加载器泄漏检测**:堆分析标记增长的 ClassLoader 实例,但如果没有内存分析器数据,则无法确定泄漏。
## MCP Java 后端套件的一部分
- [mcp-db-analyzer](https://www.npmjs.com/package/mcp-db-analyzer) — PostgreSQL/MySQL/SQLite 架构分析
- [mcp-spring-boot-actuator](https://www.npmjs.com/package/mcp-spring-boot-actuator) — Spring Boot 健康、指标和 bean 分析
- [mcp-redis-diagnostics](https://www.npmjs.com/package/mcp-redis-diagnostics) — Redis 内存、慢日志和客户端诊断
- [mcp-migration-advisor](https://www.npmjs.com/package/mcp-migration-advisor) — Flyway/Liquibase 迁移风险分析
## 许可证
MIT
---
**生命周期终止日期:2026-05-10**
此 MCP 服务器不再维护或分发。公司已转向 Apify 市场参与者。参见
[`irrationalways` on Apify](https://apify.com/irrationalways) 和
`irrcorp/bzp-poland-tenders` 获取当前公司工作。
npm 包已取消发布。仓库已存档,仅供历史参考。