JVM诊断工具

一个MCP服务器,为AI助手提供分析JVM线程转储和GC日志的能力,检测死锁、识别锁争用热点、分析垃圾收集压力并推荐JVM调优参数。

  • by Dmitriusan
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 Dmitriusan/mcp-jvm-diagnostics

使用说明

MCP JVM诊断

模型上下文协议(MCP)服务器,使AI助手能够分析JVM线程转储和GC日志。它检测死锁,识别锁争用热点,分析垃圾收集压力,并推荐JVM调优参数。

为什么是这个工具?

JVM诊断MCP服务器存在(TDA、jfr-MCP、Arthas),但它们都是 基于Java,只需要JVM运行时来诊断JVM问题。此工具运行于 Node.js 通过 npx --没有JVM,没有Docker,没有SSH。

它分析 离线 工件(线程转储、GC日志、堆直方图),而不需要运行JVM。粘贴线程转储或GC日志并获得即时分析。

特性

  • 6个MCP工具 用于全面的JVM诊断
  • 线程转储分析 --死锁检测、争用热点、线程状态崩溃
  • GC日志分析 --暂停统计、堆趋势、内存泄漏检测
  • 堆直方图分析 --内存泄漏候选者、类加载器泄漏、最终确定问题
  • JFR总结 --Java飞行记录器文件分析
  • 统一诊断 --交叉关联线程和GC数据
  • 支持 G1、ZGC、并行、串行和Shenandoah GC格式
  • 无外部依赖关系 -适用于本地文本输入,不需要API键

专业级别

生成可导出的诊断报告(HTML+PDF) 使用Pro许可证密钥。

  • 完整的JVM线程转储分析报告,其中包含可操作的建议
  • PDF导出以与您的团队共享
  • 优先支持

9.00美元/月 — 获取专业版许可证

Pro许可证密钥激活 generate_report MCP-jvm诊断中的MCP工具。

安装

npx mcp-jvm-diagnostics

或全局安装:

npm install -g mcp-jvm-diagnostics

配置

克劳德桌面版

添加 ~/.claude/claude_desktop_config.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

结合线程转储和GC日志分析的统一JVM诊断,用于全面的根本原因分析。

参数:

  • thread_dump (可选)--线程转储文本
  • gc_log (可选)--GC日志文本

示例提示: “我同时有一个线程转储和GC日志——诊断出了什么问题”

compare_heap_histos

比较两个 jmap -histo 在不同时间拍摄的快照,用于检测内存增长模式和泄漏候选者。

参数:

  • before --第一个(较早的)jmap histo输出
  • after --第二个(稍后的)jmap-histo输出

示例提示: “比较这两个堆直方图,告诉我什么在增长”

检测:

  • 实例/字节数不断增长的类(泄漏候选)
  • 快照之间出现的新类
  • 消失的类(GC删除或卸载)
  • 总体堆增长率
  • 类加载器泄漏和终结器队列增长

收集JVM诊断

线程转储

# Using jstack
jstack <pid> > thread-dump.txt

# Using kill signal (Linux/Mac)
kill -3 <pid>

# Using jcmd
jcmd <pid> Thread.print > thread-dump.txt

GC日志

将这些JVM标志添加到您的应用程序中:

# Java 9+ (unified logging)
-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 format(Java 8)有基本的支持,但可能会错过一些事件。
  • 谢南多厄GC:支持有限。完全支持G1、ZGC、并行和串行。
  • 虚拟线程(Java 21+):线程转储解析器处理虚拟线程,但分析建议针对平台线程进行了调整。
  • 堆历史比较:需要标准 jmap -histo 或 jcmd GC.class_histogram 格式。自定义格式或截断的输出可能无法正确解析。
  • 死锁检测:检测基于监视器的死锁。如果锁地址在线程转储中不可见,则可能无法检测到ReentrantLock死锁。
  • 无历史分析:每个分析都是一个时间点快照。对于趋势分析,请手动比较多个快照。
  • 仅限HotSpot/OpenJDK:解析器以HotSpot/OpenJDK线程转储格式为目标。GraalVM本机映像或Eclipse OpenJ9转储可能无法完全解析。
  • Classloader泄漏检测:堆分析标记了正在增长的ClassLoader实例,但如果没有内存分析器数据,则无法明确证明泄漏。

MCP Java后端套件的一部分

许可证

麻省理工学院


生命终结:2026-05-10。

此MCP服务器不再维护或分发。公司 已经转向Apify市场参与者。看 irrationalways 关于Apify 和 irrcorp/bzp-poland-tenders 对于当前的公司工作。

npm包尚未发布。存储库已存档 仅供历史参考。