0Pricing
Go Academy · レッスン

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.prof

top出力の読み方

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. testing.Bによるベンチマークの作成
  2. pprofによるCPUプロファイリング
  3. ヒープとメモリ割り当てのプロファイリング
  4. 実行トレース
← Go Academyに戻る