pprofによるCPUプロファイリング
CPUプロファイルの収集と可視化
「pprofによるCPUプロファイリング」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
pprofとは
net/http/pprofとruntime/pprofパッケージは、プログラムがCPU時間をどこで消費しているかを示すプロファイリングデータを提供します。go tool pprof CLIでプロファイルを分析できます。
HTTP pprofエンドポイント
_ "net/http/pprof"をインポートすると、既存のHTTPサーバーに/debug/pprof/以下のプロファイリング用エンドポイントが登録されます。
import _ "net/http/pprof"
go func() {
log.Println(http.ListenAndServe(":6060", nil))
}()CPUプロファイルの取得
HTTPエンドポイントから30秒間のCPUプロファイルを取得します:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30ファイルベースのCPUプロファイリング
HTTPサーバーを持たないプログラムでは、runtime/pprofを使ってプロファイルファイルに書き込みます:
f, _ := os.Create("cpu.prof")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
// run workloadテストでのプロファイリング
-cpuprofileフラグと-memprofileフラグを指定してテストを実行し、現実的なテスト負荷でプロファイリングします:
go test -cpuprofile cpu.prof -memprofile mem.prof -bench=. ./...go tool pprofの対話モード
プロファイルを開き、対話コマンドで調査します:
go tool pprof cpu.prof
(pprof) top # top functions by CPU time
(pprof) list main # annotated source
(pprof) web # call graph in browserフレームグラフ
-http=:8080を指定すると、対話型のWeb UI用のフレームグラフを生成できます(graphvizが必要です):
go tool pprof -http=:8080 cpu.proftop出力の読み方
topは、自己時間(その関数自身で費やした時間)と累積時間(呼び出した関数を含む時間)の順に関数を表示します。直接的な最適化の機会を見つけるには、自己時間が大きい関数に注目します。
Goroutineプロファイル
/debug/pprof/goroutineエンドポイントには、すべてのGoroutineのスタックトレースが表示されます。GoroutineリークやブロックされたGoroutineの検出に使います。
go tool pprof http://localhost:6060/debug/pprof/goroutine継続的プロファイリング
本番システムでは、継続的プロファイリングサービス(Pyroscope、Datadog、Google Cloud Profiler)を使うと、サービスを停止せずにプロファイルを取得できます。
CIでのpprof
コードの2つのバージョンから取得したプロファイルを比較し、本番環境に到達する前にパフォーマンスのリグレッションを検出します。
クイックチェック
pprofのtop出力にある「self」列は何を表しますか?
まとめ: pprofによるCPUプロファイリング
重要事項:
- HTTPエンドポイントにはnet/http/pprof、ファイルにはruntime/pprofをインポートします
- go tool pprof -http=:8080でフレームグラフUIを表示します
- topでは、self時間が直接的なコスト、累積時間が呼び出し先を含む合計コストを表します
- ベンチマークのプロファイリングにはgo test -cpuprofileを使います
よくある質問
「pprofによるCPUプロファイリング」レッスンは無料ですか?
はい。「pprofによるCPUプロファイリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「pprofによるCPUプロファイリング」で何を学びますか?
CPUプロファイルの収集と可視化 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「pprofによるCPUプロファイリング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- testing.Bによるベンチマークの作成
- pprofによるCPUプロファイリング
- ヒープとメモリ割り当てのプロファイリング
- 実行トレース