satake.blog logo
Published on

go-chiでpprof

pprofそのものについて

この辺が分かりやすい

プロファイリング(pprof)

go-chiでのpprof取得

go-chiにはpprof取得用のエンドポイントを追加するメソッドが用意されている

GitHub: go-chi

使い方についてもコード内にコメントがあるが、ミドルウェアの構成とルーティング構成の間にProfilerメソッドから得られるハンドラを/debug(おそらく任意のパス)にマウントする

server.go
import "github.com/go-chi/middleware"

func MyService() http.Handler {
    r := chi.NewRouter()
    // ..ミドルウェアの構成
    r.Mount("/debug", middleware.Profiler())
    // ..ルーティングの構成
    return r
}

この状態でデプロイすると、/debug以下にnet/httpでpprofを有効にしたときと同様のエンドポイントが構成される。

Webサーバーのpprof分析については下の記事が端的で分かりやすい。

pprofを使ってGoのメモリリークを解決する

この記事の執筆時点で私はメモリリークっぽいところを見つけるに至っただけで、ほとんど仕様理解をできていない。そのうち理解度が高まったときにはpprofそのものや分析時の指標の見方など詳細に記事にしたい。