简体中文 |英语
Pprof分析仪MCP服务器
](https://smithery.ai/server/@ZephyrDeng/pprof-analyzer-mcp)    ](https://golang.org) 
这是一个在Go中实现的模型上下文协议(MCP)服务器,提供了一个分析Go性能配置文件的工具。与官方合作建造 模型上下文协议Go SDK.
特性
analyze_pprof工具:
- 分析指定的Go-prof文件并返回序列化分析结果(例如,Top N列表或JSON火焰图)。 - 支持的配置文件类型: - cpu:分析代码执行期间的CPU时间消耗,以找到热点。 - heap:分析当前内存使用情况(堆分配),以找到内存消耗高的对象和函数。通过对象计数、分配站点和类型信息进行了增强。 - goroutine:显示所有当前goroutine的堆栈跟踪,用于诊断死锁、泄漏或过度使用goroutine。 - allocs:分析程序执行过程中的内存分配(包括释放的内存),以定位频繁分配的代码。提供详细的分配站点和对象计数信息。 - mutex:分析互斥体上的争用,以查找导致阻塞的锁。提供详细的统计数据,包括争用计数、延迟时间和百分比。 - block:分析导致goroutine阻塞的操作(例如,通道等待、系统调用)。提供全面的阻塞统计数据和平均延迟计算。 - 支持的输出格式: text, markdown, json (前N个列表), flamegraph-json (分层火焰图数据,默认)。 - text, markdown:人类可读的文本或Markdown格式。 - json:以结构化JSON格式输出前N个结果(为 cpu, heap, goroutine, allocs, mutex, block). - flamegraph-json:以JSON格式输出分层火焰图数据,与d3火焰图兼容(实现用于 cpu, heap, allocs,默认格式)。输出紧凑。 - 前N个结果的可配置数量(top_n,默认为5,有效期为 text, markdown, json 格式)。
generate_flamegraph工具:
- 用途 go tool pprof 为指定的pprf文件生成火焰图(SVG格式),将其保存到指定路径,并返回路径和SVG内容。 - 支持的配置文件类型: cpu, heap, allocs, goroutine, mutex, block. - 要求用户指定输出SVG文件路径。 - 重要提示: 此功能取决于 Graphviz 正在安装。
open_interactive_pprof工具(仅限macOS):
- 尝试发射 go tool pprof 指定pprf文件的后台交互式web UI。使用端口 :8081 默认情况下,如果 http_address 未提供。 - 返回后台的进程ID(PID) pprof 成功启动后的流程。 - 仅限macOS: 此工具仅适用于macOS。 - 依赖关系: 需要 go 命令在系统的PATH中可用。 - 限制: 背景错误 pprof 进程不会被服务器捕获。从远程URL下载的临时文件在进程终止之前不会自动清理(可以通过手动方式 disconnect_pprof_session 或者当MCP服务器退出时)。
detect_memory_leaks工具:
- 比较两个堆配置文件快照以识别潜在的内存泄漏。 - 按对象类型和分配位置分析内存增长。 - 提供有关内存增长的详细统计信息,包括绝对值和百分比变化。 - 可配置的增长阈值和结果限制。 - 通过比较在不同时间点获取的配置文件来帮助识别内存泄漏。
disconnect_pprof_session工具:
- 尝试终止后台 pprof 之前启动的进程 open_interactive_pprof,使用其PID。 - 首先发送中断信号,如果中断失败,则发送终止信号。
compare_profiles工具:
- 比较两个配置文件(例如,基线与目标),以确定性能回归或改进。 - 支持所有配置文件类型(cpu、堆、allocs、互斥、块)。 - 提供详细的差异统计数据,包括改进/回归函数、添加/删除函数。 - 视觉指示器:🔴 回归,🟢 改进,🆕 补充,❌ 远离的。 - 支持文本、markdown和JSON输出格式。
analyze_heap_time_series工具:
- 随着时间的推移分析多个堆配置文件,以确定内存增长趋势和潜在泄漏。 - 需要按时间顺序提供至少3个堆配置文件。 - 计算增长率(字节数、百分比、MB/分钟)。 - 使用方向指示器识别趋势对象类型(📈 增加的,📉 减少,➡️ 稳定)。 - 支持每个时间点的自定义标签或自动生成默认标签。 - 支持文本、markdown和JSON输出格式。
安装(作为库/工具)
您可以使用直接安装此软件包 go install:
go install github.com/ZephyrDeng/pprof-analyzer-mcp@latest这将安装 pprof-analyzer-mcp 可执行到您的 $GOPATH/bin 或 $HOME/go/bin 目录。确保此目录位于系统的PATH中,以便直接运行该命令。
从源头构建
确保您安装了Go环境(建议使用Go 1.18或更高版本)。
在项目根目录中(pprof-analyzer-mcp),运行:
go build这将生成一个名为的可执行文件 pprof-analyzer-mcp (或 pprof-analyzer-mcp.exe 在Windows上)在当前目录中。
使用 go install (推荐)
您还可以使用 go install 将可执行文件安装到您的 $GOPATH/bin 或 $HOME/go/bin 目录。这可以让你跑步 pprof-analyzer-mcp 直接从命令行(如果目录已添加到系统的PATH环境变量中)。
# Installs the executable using the module path defined in go.mod
go install .
# Or directly using the GitHub path (recommended after publishing)
# go install github.com/ZephyrDeng/pprof-analyzer-mcp@latest使用Docker运行
使用Docker是运行服务器的一种便捷方式,因为它捆绑了必要的Graphviz依赖关系。
- 构建Docker镜像:
在项目根目录中( Dockerfile 位于),运行:
docker build -t pprof-analyzer-mcp .- 运行Docker容器:
docker run -i --rm pprof-analyzer-mcp- 这 -i 标志保持STDIN打开,这是此MCP服务器使用的stdio传输所必需的。 - 这 --rm 当容器退出时,标志会自动移除容器。
- 为Docker配置MCP客户端:
要将您的MCP客户端(如Roo-Cline)连接到在Docker中运行的服务器,请更新您的 .roo/mcp.json:
{
"mcpServers": {
"pprof-analyzer-docker": {
"command": "docker run -i --rm pprof-analyzer-mcp"
}
}
}确保 pprof-analyzer-mcp 在客户端尝试运行此命令之前,映像已在本地构建。
发布(通过GitHub操作自动完成)
此项目使用 GoRelease 以及GitHub Actions,以自动化发布过程。当Git标签与模式匹配时,会自动触发发布 v* (例如。, v0.1.0, v1.2.3)被推送到存储库。
预发布检查表:
在创建发布标签之前,请确保:
- ✅ 所有测试均通过:
go test ./... - ✅ 代码编译成功:
go build - ✅ 文档是最新的(README、CHANGELOG等)
- ✅ 提交消息如下 约定式提交 格式
释放步骤:
- 进行更改: 开发新功能或修复错误。
- 提交更改: 使用提交更改 约定式提交 格式(例如。,
feat: ...,fix: ...,docs: ...).这对于自动生成变更日志非常重要。
git add .
git commit -m "feat: Add awesome new feature"
# or
git commit -m "fix: Resolve issue #42"
# or
git commit -m "docs: Update README for new feature"- 推送更改: 将您的提交推送到GitHub上的主分支。
git push origin main- 运行预发布测试: (可选)在标记之前在本地运行测试:
go test ./... -v
go build -v- 创建并推送标签: 准备发布时,创建一个新的Git标签并将其推送到GitHub。
# Example: Create tag v0.2.0
git tag v0.2.0
# Push the tag to GitHub
git push origin v0.2.0- 自动释放: 按下标签将触发
GoReleaserGitHub操作定义于.github/workflows/release.yml。此操作将:
- 为Linux、macOS和Windows(amd64和arm64)构建二进制文件。 - 根据自上次标记以来的常规提交生成更改日志。 - 使用变更日志创建一个新的GitHub版本,并将构建的二进制文件和校验和作为资产附加。
监控发布:
您可以在GitHub存储库的“操作”选项卡中查看发布工作流进度。一旦完成,该版本将在以下网址发布:
https://github.com/ZephyrDeng/pprof-analyzer-mcp/releases配置MCP客户端
此服务器使用 stdio 传输协议。您需要在MCP客户端中配置它(例如,用于VS Code的Roo-Cline扩展)。
通常,这涉及将以下配置添加到 .roo/mcp.json 项目根目录中的文件:
{
"mcpServers": {
"pprof-analyzer": {
"command": "pprof-analyzer-mcp"
}
}
}注: 调整 command 基于构建方法的值(go build 或 go install)以及可执行文件的实际位置。确保MCP客户端可以找到并执行此命令。
配置后,重新加载或重新启动MCP客户端,它应该会自动连接到 PprofAnalyzer 服务器。
依赖项
- Graphviz:The
generate_flamegraph该工具需要Graphviz来生成SVG火焰图(go tool pprof命令调用dot生成SVG时)。确保Graphviz已安装在您的系统上dot命令在系统的PATH环境变量中可用。
安装Graphviz:
- macOS(使用Homebrew):
brew install graphviz- Debian/Ubuntu:
sudo apt-get update && sudo apt-get install graphviz- CentOS/Fedora:
sudo yum install graphviz
# or
sudo dnf install graphviz- Windows(使用巧克力):
choco install graphviz- 其他系统: 请参阅 Graphviz官方下载页面.
使用示例(通过MCP客户端)
服务器连接后,您可以调用 analyze_pprof 和 generate_flamegraph 工具使用 file://, http://,或 https:// 配置文件的URI。
示例:分析CPU配置文件(文本格式,前5名)
{
"tool_name": "analyze_pprof",
"arguments": {
"profile_uri": "file:///path/to/your/cpu.pprof",
"profile_type": "cpu"
}
}示例:分析堆配置文件(Markdown格式,前10名)
{
"tool_name": "analyze_pprof",
"arguments": {
"profile_uri": "file:///path/to/your/heap.pprof",
"profile_type": "heap",
"top_n": 10,
"output_format": "markdown"
}
}示例:分析Goroutine配置文件(文本格式,前5名)
{
"tool_name": "analyze_pprof",
"arguments": {
"profile_uri": "file:///path/to/your/goroutine.pprof",
"profile_type": "goroutine"
}
}示例:为CPU配置文件生成火焰图
{
"tool_name": "generate_flamegraph",
"arguments": {
"profile_uri": "file:///path/to/your/cpu.pprof",
"profile_type": "cpu",
"output_svg_path": "/path/to/save/cpu_flamegraph.svg"
}
}示例:为堆配置文件生成火焰图(inuse_space)
{
"tool_name": "generate_flamegraph",
"arguments": {
"profile_uri": "file:///path/to/your/heap.pprof",
"profile_type": "heap",
"output_svg_path": "/path/to/save/heap_flamegraph.svg"
}
}示例:分析CPU配置文件(JSON格式,前3名)
{
"tool_name": "analyze_pprof",
"arguments": {
"profile_uri": "file:///path/to/your/cpu.pprof",
"profile_type": "cpu",
"top_n": 3,
"output_format": "json"
}
}示例:分析CPU配置文件(默认火焰图JSON格式)
{
"tool_name": "analyze_pprof",
"arguments": {
"profile_uri": "file:///path/to/your/cpu.pprof",
"profile_type": "cpu"
// output_format defaults to "flamegraph-json"
}
}示例:分析堆配置文件(显式火焰图JSON格式)
{
"tool_name": "analyze_pprof",
"arguments": {
"profile_uri": "file:///path/to/your/heap.pprof",
"profile_type": "heap",
"output_format": "flamegraph-json"
}
}示例:分析远程CPU配置文件(来自HTTP URL)
{
"tool_name": "analyze_pprof",
"arguments": {
"profile_uri": "https://example.com/profiles/cpu.pprof",
"profile_type": "cpu"
}
}示例:分析在线CPU配置文件(来自GitHub原始URL)
{
"tool_name": "analyze_pprof",
"arguments": {
"profile_uri": "https://raw.githubusercontent.com/google/pprof/refs/heads/main/profile/testdata/gobench.cpu",
"profile_type": "cpu",
"top_n": 5
}
}示例:为在线堆配置文件生成火焰图(来自GitHub原始URL)
{
"tool_name": "generate_flamegraph",
"arguments": {
"profile_uri": "https://raw.githubusercontent.com/google/pprof/refs/heads/main/profile/testdata/gobench.heap",
"profile_type": "heap",
"output_svg_path": "./online_heap_flamegraph.svg"
}
}示例:打开用于在线CPU配置文件的交互式Pprof UI(仅限macOS)
{
"tool_name": "open_interactive_pprof",
"arguments": {
"profile_uri": "https://raw.githubusercontent.com/google/pprof/refs/heads/main/profile/testdata/gobench.cpu"
// Optional: "http_address": ":8082" // Example of overriding the default port
}
}示例:检测两个堆配置文件之间的内存泄漏
{
"tool_name": "detect_memory_leaks",
"arguments": {
"old_profile_uri": "file:///path/to/your/heap_before.pprof",
"new_profile_uri": "file:///path/to/your/heap_after.pprof",
"threshold": 0.05, // 5% growth threshold
"limit": 15 // Show top 15 potential leaks
}
}示例:断开Pprof会话的连接
{
"tool_name": "disconnect_pprof_session",
"arguments": {
"pid": 12345 // Replace 12345 with the actual PID returned by open_interactive_pprof
}
}未来改进(TODO)
- 基于以下内容在MCP结果中添加MIME类型处理
output_format. - 添加更强大的错误处理和日志级别控制。
- 添加端到端MCP工具交互的集成测试。
- 大型配置文件(>1GB)的性能优化。
最近完成(v0.3.0)
- ✅ ~~实施差异火焰图,以可视化轮廓之间的变化。~~(完成-
compare_profiles工具) - ✅ ~~为内存配置文件添加时间序列分析,以跟踪多个快照的增长情况。~~(完成-
analyze_heap_time_series工具) - ✅ 在每个PR上添加带有GitHub Actions测试的自动化CI/CD。
- ✅ ~~实施完整的分析逻辑
mutex,block个人资料。~~(在v0.2.0中完成) - ✅ ~~实施
json输出格式mutex,block配置文件类型。~~(在v0.2.0中完成) - ✅ 迁移到官方 模型上下文协议Go SDK.
- ✅ ~~考虑支持远程审批文件URI(例如。,
http://,https://).~~(在v0.2.0中完成) - ✅ ~~实施完整的分析逻辑
allocs个人资料。~~(在v0.2.0中完成) - ✅ ~~实施
json输出格式allocs配置文件类型。~~(在v0.2.0中完成) - ✅ ~~添加内存泄漏检测功能。~~(在v0.2.0中完成)

