実行トレース
go tool traceによるゴルーチン単位の分析
「実行トレース」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
実行トレースとは
Goの実行トレーサーは、Goroutineのスケジューリング、GCイベント、システムコール、ヒープの増加をタイムラインとして記録します。CPUプロファイルやヒーププロファイルでは得られない、並行性とレイテンシーの視覚的な情報を提供します。
トレースの取得
HTTPエンドポイントからトレースを取得します:
curl http://localhost:6060/debug/pprof/trace?seconds=5 -o trace.out
go tool trace trace.outファイルベースのトレース
runtime/traceを使って、プログラムからトレースを記録します:
f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()
// run workloadgo test -trace
テストやベンチマークの実行中にトレースを取得します:
go test -trace trace.out -bench=. ./...
go tool trace trace.outトレースビューアー
トレースビューアー(go tool trace)をブラウザーで開くと、Goroutineのタイムライン、GCイベント、ヒープサイズ、任意の時点におけるGoroutineごとのスタックトレースが表示されます。
Goroutineの分析
Goroutine Analysisビューでは、Goroutineを関数ごとにグループ化し、それぞれが各状態にどれだけの時間を費やしたかを表示します。状態には、実行中、実行可能(Pを待機中)、ブロック中(チャネル・ミューテックス・システムコール)、スリープ中があります。
スケジューラーのレイテンシーの特定
「runnable」時間が長いということは、Goroutineが実行可能でありながらスケジュールされていないことを意味します。これは、GOMAXPROCS個のPをめぐって競合するGoroutineが多すぎるか、プロセスがCPU不足であることを示します。
GCの影響
Stop-the-worldのGCによる一時停止は、すべてのGoroutineにまたがる灰色のバーとして表示されます。停止時間が長い、またはGCの頻度が高い場合は、アロケーションが過剰である可能性があります。ヒーププロファイリングと組み合わせてアロケーションを削減します。
ユーザーアノテーション
trace.WithRegionとtrace.Logを使ってトレースにカスタムスパンを追加し、分析しやすいように独自のコードセクションに注釈を付けます。
trace.WithRegion(ctx, "parse request", func() {
parseRequest(req)
})taskとregion
trace.NewTaskは、関連するregionを名前付きのtaskの下にまとめます。これにより、複数のGoroutineにまたがる論理操作のエンドツーエンドのレイテンシーを測定できます。
ctx, task := trace.NewTask(ctx, "handle request")
defer task.End()トレースとプロファイルの違い
CPUプロファイルは、時間の経過とともにどの関数がCPUを消費しているかを示します。ヒーププロファイルは、どの関数がメモリを割り当てているかを示します。トレースは、Goroutineがいつ実行・ブロックされ、GCがどのように割り込んでいるかを示します。それぞれ異なる疑問に対応するツールです。
クイックチェック
実行トレースにおける「runnable」Goroutineの状態は何を意味しますか?
まとめ: 実行トレース
重要事項:
- go tool traceでGoroutineのタイムライン、GCイベント、スケジューリングを確認できます
- HTTPエンドポイントまたはruntime/traceパッケージで取得します
- Runnable時間はスケジューラーの競合、GCの一時停止は過剰なアロケーションを示します
- ユーザーアノテーション(WithRegion、NewTask)で独自のセクションに印を付けます
よくある質問
「実行トレース」レッスンは無料ですか?
はい。「実行トレース」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「実行トレース」で何を学びますか?
go tool traceによるゴルーチン単位の分析 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「実行トレース」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。