内容
# pprof-mcp-agent
一个通过模型上下文协议(Model Context Protocol,MCP)提供运行时分析数据的Go代理。它使得实时收集和分析Go运行时性能数据变得更加容易,从而更好地监控和调试生产环境中的Go应用程序。
## 安装
```bash
go get github.com/yudppp/pprof-mcp-agent
```
## 概述
pprof-mcp-agent将Go的内置分析功能与MCP协议集成,提供了一种简化的方式来收集和分析性能数据。它支持多种分析类型,每种类型旨在帮助诊断应用程序性能的不同方面:
### 支持的分析类型
- **CPU Profile**: 识别CPU密集型代码路径和性能瓶颈
- 可配置的采样持续时间(默认:10秒)
- 显示程序执行时间的分布
- 有助于优化CPU绑定的应用程序
- **Heap Profile**: 分析内存使用模式
- 显示按位置的当前内存分配
- 帮助识别内存泄漏和低效的内存使用
- 包括正在使用和已分配的内存统计信息
- **Goroutine Profile**: 检查goroutine行为
- 显示当前运行的goroutine及其状态
- 帮助识别goroutine泄漏和死锁
- 提供详细的堆栈跟踪以便调试
- **Block Profile**: 分析同步问题
- 显示goroutine在同步原语上阻塞的位置
- 帮助识别争用点和性能瓶颈
- 包括阻塞持续时间统计信息
- **Allocation Profile**: 检查内存分配模式
- 显示按位置的内存分配频率
- 帮助识别内存波动和优化机会
- 包括已分配和已释放的内存统计信息
- **Thread Creation Profile**: 监控操作系统线程创建
- 显示新操作系统线程创建的位置
- 帮助识别线程泄漏和过度线程创建
- 有助于分析线程池行为
## 分析视图模式
每种分析可以以三种不同模式查看:
- **Flat View**(默认):显示每个函数的直接值
- 显示直接在每个函数中花费的时间/内存等
- 排除在此函数调用的其他函数中花费的时间
- 最适合识别代码中的特定热点
- **Cumulative View**: 显示包括子函数的累积值
- 包括在函数及其调用的所有函数中花费的时间
- 有助于识别调用层次结构中的高层瓶颈
- 有助于理解函数调用的整体影响
- **Graph View**: 显示调用图关系
- 显示函数之间的父子关系
- 显示每个函数的前5个子函数
- 有助于理解调用流程并识别问题路径
## 使用
### 基本集成
```go
package main
import (
"context"
"log"
pprofmcpagent "github.com/yudppp/pprof-mcp-agent"
)
func main() {
// 创建一个用于控制服务器生命周期的上下文
ctx := context.Background()
// 在1239端口启动MCP服务器
if err := pprofmcpagent.ServeSSE(ctx, ":1239"); err != nil {
log.Fatalf("启动pprof MCP代理失败: %v", err)
}
}
```
### 配置
每种分析类型支持以下配置选项:
- `limit`: 结果中显示的最大位置数量(默认:100,最小:100,最大:10000)
- `view`: 分析视图模式(`flat`、`cum`或`graph`,默认:`flat`)
- `duration`: CPU分析的采样持续时间(默认:10秒)
## 特性
- **实时分析**: 从运行中的应用程序收集分析数据
- **多种视图模式**: 以平面、累积或图形视图分析数据
- **聚合结果**: 查看聚合统计信息以便更好地分析
- **多种分析类型**: 全面覆盖不同的性能方面
- **易于集成**: 简单的API便于快速集成到现有应用程序中
- **MCP协议**: 可靠数据传输的标准协议
- **可配置**: 可调参数以满足不同的分析需求
## 贡献
欢迎贡献!以下是您可以帮助的方式:
1. Fork该仓库
2. 创建您的功能分支(`git checkout -b feature/amazing-feature`)
3. 提交您的更改(`git commit -m '添加一些惊人的功能'`)
4. 推送到分支(`git push origin feature/amazing-feature`)
5. 打开一个Pull Request
请确保您的PR包含适当的测试和文档更新。
## 许可证
[MIT许可证 (MIT)](https://github.com/yudppp/pprof-mcp-agent/blob/main/LICENSE)
## 作者
yudppp
## 支持
如果您遇到任何问题或有疑问,请在GitHub仓库中提交问题。