简体中文| English
Pprof アナライザー MCP サーバー
これは Go で実装された Model Context Protocol (MCP) サーバーであり、Go pprof パフォーマンス プロファイルを分析するためのツールを提供します。
特徴
analyze_pprof指定された Go pprof ファイルを分析し、シリアル化された分析結果 (例: Top N リストまたはフレーム グラフ JSON) を返します。
サポートされているプロファイルの種類:
cpu: コード実行中の CPU 時間消費を分析してホットスポットを見つけます。heap: 現在のメモリ使用量 (ヒープ割り当て) を分析して、メモリ消費量の多いオブジェクトと関数を見つけます。goroutine: デッドロック、リーク、または過度の goroutine の使用を診断するために使用される、現在のすべての goroutine のスタック トレースを表示します。allocs: プログラム実行中にメモリ割り当て(解放されたものも含む)を分析し、頻繁に割り当てが行われるコードを見つけます。(まだ実装されていません)mutex: ミューテックスの競合を分析して、ブロックの原因となるロックを見つけます。(まだ実装されていません)block: goroutine のブロックを引き起こす操作(チャネル待機、システムコールなど)を分析します。(まだ実装されていません)
サポートされている出力形式:
text、markdown、json(上位 N リスト)、flamegraph-json(階層型フレーム グラフ データ、デフォルト)。text、markdown: 人間が読めるテキストまたは Markdown 形式。json: 上位 N 件の結果を構造化された JSON 形式で出力します (cpu、heap、goroutine用に実装されています)。flamegraph-json: 階層的なフレームグラフデータをJSON形式で出力します。d3-flame-graph(cpu、heap、デフォルト形式に対応)と互換性があります。出力はコンパクトです。
設定可能な上位 N 件の結果の数 (
top_n、デフォルトは 5、text、markdown、json形式で有効)。
generate_flamegraphgo tool pprofを使用して、指定された pprof ファイルのフレーム グラフ (SVG 形式) を生成し、指定されたパスに保存して、パスと SVG コンテンツを返します。サポートされているプロファイル タイプ:
cpu、heap、allocs、goroutine、mutex、block。ユーザーは出力 SVG ファイル パスを指定する必要があります。
**重要:**この機能はGraphvizがインストールされている必要があります。
open_interactive_pprof指定されたpprofファイルに対して、
go tool pprofインタラクティブウェブUIをバックグラウンドで起動しようとします。http_addresshttp_address指定されていない場合は、デフォルトでポート:8081を使用します。起動が成功すると、バックグラウンド
pprofプロセスのプロセス ID (PID) を返します。**macOS のみ:**このツールは macOS でのみ動作します。
**依存関係:**システムの PATH で
goコマンドが使用可能である必要があります。**制限事項:**バックグラウンドの
pprofプロセスからのエラーはサーバーによってキャプチャされません。リモート URL からダウンロードされた一時ファイルは、プロセスが終了するまで(disconnect_pprof_sessionによる手動実行、または MCP サーバーの終了時)自動的には削除されません。
disconnect_pprof_session以前に
open_interactive_pprofによって開始されたバックグラウンドpprofプロセスを、その PID を使用して終了しようとします。最初に割り込み信号を送信し、割り込みが失敗した場合は Kill 信号を送信します。
Related MCP server: godoc-mcp
インストール(ライブラリ/ツールとして)
go installを使用してこのパッケージを直接インストールできます。
これによりpprof-analyzer-mcp実行ファイルが$GOPATH/binまたは$HOME/go/binディレクトリにインストールされます。コマンドを直接実行するには、このディレクトリがシステムのPATHに含まれていることを確認してください。
ソースから構築
Go 環境がインストールされていることを確認してください (Go 1.18 以上を推奨)。
プロジェクトのルート ディレクトリ ( pprof-analyzer-mcp ) で、次のコマンドを実行します。
これにより、現在のディレクトリにpprof-analyzer-mcp (または Windows の場合はpprof-analyzer-mcp.exe ) という名前の実行可能ファイルが生成されます。
go install使用する(推奨)
go install使って実行ファイルを$GOPATH/binまたは$HOME/go/binディレクトリにインストールすることもできます。これによりpprof-analyzer-mcpコマンドラインから直接実行できるようになります(ディレクトリがシステムの PATH 環境変数に追加されている場合)。
Dockerで実行する
Docker を使用すると、必要な Graphviz 依存関係がバンドルされるため、サーバーを実行するのに便利です。
**Docker イメージをビルドします。**プロジェクトのルート ディレクトリ (
Dockerfileがある場所) で、次のコマンドを実行します。docker build -t pprof-analyzer-mcp .Docker コンテナを実行します。
docker run -i --rm pprof-analyzer-mcp-iフラグは、この MCP サーバーが使用する stdio トランスポートに必要な STDIN を開いたままにします。--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 Actions による自動化)
このプロジェクトでは、 GoReleaserとGitHub Actionsを使用してリリースプロセスを自動化しています。リリースは、パターンv*に一致するGitタグ(例: v0.1.0 、 v1.2.3 )がリポジトリにプッシュされると自動的に実行されます。
リリース手順:
**変更を加える:**新しい機能を開発するか、バグを修正します。
変更をコミット: Conventional Commits形式(例:
feat: ...、fix: ...)を使用して変更をコミットします。これは、変更ログの自動生成に重要です。git add . git commit -m "feat: Add awesome new feature" # or git commit -m "fix: Resolve issue #42"**変更をプッシュ:**コミットを GitHub のメイン ブランチにプッシュします。
git push origin main**タグの作成とプッシュ:**リリースの準備ができたら、新しい Git タグを作成し、GitHub にプッシュします。
# Example: Create tag v0.1.0 git tag v0.1.0 # Push the tag to GitHub git push origin v0.1.0**自動リリース:**タグをプッシュすると、
.github/workflows/release.ymlで定義されたGoReleaserGitHub アクションがトリガーされます。このアクションは以下のようになります。Linux、macOS、Windows (amd64 および arm64) 用のバイナリをビルドします。
最後のタグ以降の Conventional Commits に基づいて変更ログを生成します。
変更ログを含む新しい GitHub リリースを作成し、ビルドされたバイナリとチェックサムをアセットとして添付します。
リリース ワークフローの進行状況は、GitHub リポジトリの「アクション」タブで確認できます。
MCPクライアントの設定
このサーバーはstdioトランスポートプロトコルを使用します。MCPクライアント(例:VS CodeのRoo Cline拡張機能)で設定する必要があります。
通常、これには、プロジェクト ルートの.roo/mcp.jsonファイルに次の構成を追加することが含まれます。
**注:**ビルド方法( go buildまたはgo install )と実行ファイルの実際の場所に応じてcommand値を調整してください。MCPクライアントがこのコマンドを見つけて実行できることを確認してください。
設定後、MCP クライアントをリロードまたは再起動すると、 PprofAnalyzerサーバーに自動的に接続されます。
依存関係
Graphviz :
generate_flamegraphツールは、SVG フレームグラフを生成するために Graphviz を必要とします(go tool pprofコマンドは SVG 生成時にdotコマンドを呼び出します)。Graphviz がシステムにインストールされ、システムの PATH 環境変数でdotコマンドが使用可能になっていることを確認してください。Graphviz のインストール:
macOS (Homebrew を使用):
brew install graphvizDebian/Ubuntu:
sudo apt-get update && sudo apt-get install graphvizCentOS/Fedora:
sudo yum install graphviz # or sudo dnf install graphvizWindows (Chocolatey を使用):
choco install graphvizその他のシステム: Graphviz の公式ダウンロード ページを参照してください。
使用例(MCPクライアント経由)
サーバーが接続されると、プロファイル ファイルのfile:// 、 http:// 、またはhttps:// URI を使用して、 analyze_pprofツールとgenerate_flamegraphツールを呼び出すことができます。
例: CPU プロファイルの分析 (テキスト形式、上位 5 つ)
例: ヒーププロファイルの分析 (マークダウン形式、トップ 10)
例: Goroutine プロファイルの分析 (テキスト形式、上位 5 件)
例: CPU プロファイルの Flame Graph を生成する
例: ヒーププロファイル (inuse_space) の Flame Graph を生成する
例: CPU プロファイルの分析 (JSON 形式、上位 3 つ)
例: CPU プロファイルの分析 (デフォルトの Flame Graph JSON 形式)
例: ヒーププロファイルの分析 (明示的な Flame Graph JSON 形式)
例: リモート CPU プロファイルを分析する (HTTP URL から)
例: オンライン CPU プロファイルを分析する (GitHub Raw URL から)
例: オンラインヒーププロファイルのFlame Graphを生成する (GitHub Raw URLから)
例: オンライン CPU プロファイル用のインタラクティブ Pprof UI を開く (macOS のみ)
例: Pprofセッションを切断する
今後の改善点(TODO)
allocs、mutex、blockプロファイルの完全な分析ロジックを実装します。allocs、mutex、blockプロファイル タイプにjson出力形式を実装します。output_formatに基づいて、MCP 結果に適切な MIME タイプを設定します。より堅牢なエラー処理とログ レベルの制御を追加します。
~~リモート pprof ファイル URI (例:
http://、https://) のサポートを検討してください。~~ (完了)