Upgrade to Pro — share decks privately, control downloads, hide ads and more …

pprof vs runtime/trace (FlightRecorder)

Avatar for task4233 task4233
September 30, 2025

pprof vs runtime/trace (FlightRecorder)

Go 1.25 リリースパーティ & GopherCon 2025 報告会での発表資料です。
ref: https://gocon.connpass.com/event/366062/

GopherCon2025で発表されたGo 1.25 リリースパーティ & GopherCon 2025 報告会に沿って、次のトピックをシェアしました:
・pprof / runtime/trace の目的と特性に関する理解
・FlightRecorder について

デモをご覧になりたい方はYouTubeのアーカイブを参照してください。
https://youtu.be/uY5Duj5m9ig

Avatar for task4233

task4233

September 30, 2025
Tweet

More Decks by task4233

Other Decks in Technology

Transcript

  1. 1 pprof vs runtime/trace (Flight Recorder) GC25 Recap: Profiling Request

    Latency with Critical Path Analysis Go 1.25 リリースパーティー @task4233
  2. 3 ・Recap の目的は、元の発表および関連するトピックの情報共有です  ・興味のあるワードがあれば、各自で深掘りしていただければ幸いです ・今回扱う内容は Go の標準パッケージの内容に限ります  ・Go のリリパなので、OpenTelemetry や

    eBPF などの話は扱いません🙏 ・元の発表に加えて、自分の解釈 /理解を含みます  ・それ違くないか?みたいなものがあれば、私の学びにもなるので   マサカリお待ちしてます はじめに: おことわり
  3. 8 Profiling Request Latency with Critical Path Analysis ・現実世界のWebアプリケーションで「なぜ p99

    レイテンシのリクエストが  そこまで大きいのか」を明確にしたいというモチベーションから ・処理のクリティカルパスを明確にすることで、遅いリクエストの原因を  特定するためのプロファイリング手法 を提案 ・pprof の特性に言及し、代わりに runtime/trace が提供する  トレース情報を活用した話 1. Recap対象のセッション概要
  4. 1 目的 ・CPU や メモリといったリソース消費のホットスポットを特定すること 仕組み ・Go ランタイムが一定の間隔でプログラムの実行を中断し、  その瞬間の goroutine

    のコールスタックを記録する  ・CPU プロファイルなら、デフォルトで 10[ms] ごとに記録をとる 特性 ・「何がリソースを消費しているか」に答えられる  ・リソース消費に関する情報を収集しているので ・「なぜレイテンシが大きいのか」には答えられない pprof: 統計的なサンプリングに基づくプロファイル
  5. 12 ・CPU利用率だけでは「特定のエンドポイントの p99 レイテンシが  なぜ大きいのか」を正確に解析できない  ・スレッドが CPU を利用している状態のみしかキャプチャしないため  ・この状態を on-CPU

    と呼ぶ ・対する off-CPU は?  ・I/Oバウンド(ネットワーク、ディスク)、Sleep、Channel、mutex   Syscall などのブロッキングなど  ・「待機していた」という情報は取得できるが、「待機理由」や「対象」   といった情報は取得できない😢 CPU プロファイルの限界 - on-CPU と off-CPU
  6. 13 目的 ・プログラム内でのイベントを記録して、実行の全体像を俯瞰すること 仕組み ・各アクションに応じてイベントレコードを出力する  ・goroutine の生成、Channel、Sleep、Syscall のブロッキング   GC の開始など

    特性 ・「なぜレイテンシが大きいのか」に答えられる  ・on/off-CPU問わず、詳細な時系列データが得られるので ・「何がリソースを消費しているか」には答えられない 3. runtime/trace: イベント記録に基づくプロファイル
  7. 2 ・runtime/trace は長時間稼働する現実の Web サービスでは  データが大量に残ってしまう問題がある  ・エンドポイントが「遅い」と分かるのは処理が終わってからなので ・そこで Flight Recorder

     ・トレースをソケットやファイルに書き出さず、メモリにバッファリング   するツール  ・結果に応じてトレースを永続化するか決められる ・詳しくは数日前に公開された Go Blog を参照のこと  ・ref: https://go.dev/blog/flight-recorder 4. Go 1.25 の話: Flight Recorder
  8. 2 pprof と runtime/trace にはそれぞれ特性がある ・pprof  ・何がリソースを消費しているか」に答えられる ・runtime/trace  ・「なぜレイテンシが大きいのか」に答えられる ・それぞれの特性に合わせた利用をすると良い(と思います)

    runtime/trace において、 Flight Recorder を用いることで 必要に応じた利用が可能 ・ブログで「APIを提供したから便利なツール作ってくれよな!」  と書かれていたので、興味のある方は色々と作ってみると面白いかも まとめ