pprof概要pprofの使い方の備忘録として何回かに分けて書いてきます。今回は前提知識として知っておくべきことを書きます。1.10.1pprofは2つの計測方法がある以下の2つのやり方があります。サーバーを立てる前者は短時間で実行が終了するようなケースで使います。後者はWebサーバのようにずっと動かすプログラムのケースで使います。基本的な手順は以下です。コードにプロファイラを埋め込むプログラムを動かしている間にプロファイルの取得プロファイルの解析runtime/pprofの場合runtime/pprofを使いやすい形にラップしている以下のライブラリを使います。Profileが有効になっています。profile.Start(profile.MemProfile).Stop()のように指定します。他のオプションはドキュメントで確認できます。このライブラリは一度に一種類のプロファイルしかできません。CPUとメモリを同時に〜ということはできないので注意してください。コードにプロファイラを埋め込むCPUバウンドな関数であるフィボナッチ数を取得します。30番目のフィボナッチ数を取得する関数をループで回します。}}profileファイルがカレントフォルダに出力されるようにprofile.ProfilePath(".")を付けます。cpu.pprofcpu.pprofに出力されました。出力されたファイルを解析します。プロファイルの順に書きます。注意としてこの時の実行ファイル(バイナリ)はプロファイルした時のバイナリにしてください。本番のバイナリとローカル(Mac)のバイナリが違うせいでプロファイリングできない〜とならないように。options)(pprof)インタラクティブに解析していくので、topと入力すると結果を出してくれます。runtime.mainフィボナッチ数の計算で時間がかかっていることがわかりますね。コードにプロファイラを埋め込むlocalhost:6060にサーバを立てます。プログラムを動かしている間にプロファイルの取得curlで取得します。profileは30秒かかります。先程と同じなので割愛します。http://localhost:6060/debug/pprof/profileというやり方もできます。計測できる項目がたくさんある先程はCPUプロファイルでしたが、他にもheapやらgoroutineやらを計測できます。http://localhost:6060/debug/pprof/goroutinehttp://localhost:6060/debug/pprof/heaphttp://localhost:6060/debug/pprof/threadcreatehttp://localhost:6060/debug/pprof/blockhttp://localhost:6060/debug/pprof/mutexhttp://localhost:6060/debug/pprof/profilehttp://localhost:6060/debug/pprof/trace?seconds=5注意としてデフォルトではONになっていなものもあるので、ドキュメントを見てから使いましょう。僕が知っているのは以下です。ONグラフ化することができる計測結果をグラフ化してどこにどれくらい時間・リソースがかかったかなどを見やすくすることもできます。1.11からはgithub.comも入り非常に見やすいWebUIが使えるようになってます。使い方graphvizが必要なのでインストールしてください。[profile]というフォーマットです。http://localhost:6060/debug/pprof/profileこのようなグラフが表示されます。Graphもあります。http://localhost:6060/debug/pprof/heapそれ用のWebUIが提供されます。まとめpprofの基本的な使い方を説明しました。次回はCPUの詳細や、heapなどを扱っていきたいと思います。前回はHTTPのAPIサーバの監視の仕方を説明しました。»プロフィールid:quoll00AWAのサーバ・インフラのリードエンジニアを経て現在AbemaTVにて開発。Webフロントもやります。10はてなブログをはじめよう!quoll00さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。