【けいぞくてきぷろふぁいりんぐ】

継続的プロファイリング とは?

最終更新:
💡 動作中のコードが何に資源を使うか、継続して調べる

動作中のアプリケーションから、関数ごとのCPU消費やメモリ割り当てなどの性能データを継続して集める手法。本番環境の問題をコードの箇所まで調べるために使い、メトリクスやログ、トレースと組み合わせる。

📌 このページのポイント
継続して集め、コードを調べる アプリ 計測 保存 CPUサンプルの割合(架空例) parse:60% render:40% main:100% 幅はサンプル量、横軸は時間ではない
計測・保存したプロファイルを調べる。下の図はmainがparseとrenderを呼ぶCPUプロファイルの架空例で、幅はサンプルの割合、上下は呼び出しの階層を示す。実行順や時間の経過を表す図ではない。
ひよこ ひよこ
CPU使用率を見るモニタリングと何が違うの?
ペンギン先生 ペンギン先生
CPU使用率が高いと分かったら、どのコードがCPUを使っているかをプロファイルで掘り下げられるよ。継続して集めておくと、問題が起きた時間帯のデータを後から調べられる。メトリクス、ログ、トレースを補う情報として使うんだ。
ひよこ ひよこ
本番で計測しても重くならない?
ペンギン先生 ペンギン先生
計測にもCPUやメモリが必要だよ。負荷は言語、集めるデータ、サンプリングの設定、アプリの動作などによって変わる。「何%以内だから必ず大丈夫」とは言えないので、実際の環境で影響を測って、設定を調整しよう。
ひよこ ひよこ
フレームグラフはどう読むの?
ペンギン先生 ペンギン先生
縦方向は関数の呼び出しの階層、横幅は集計したサンプルの量を表すよ。CPUのプロファイルなら、幅はCPU時間の割合を見る手掛かりになる。根元が上の表示も下の表示もあり、横軸は時間の経過や呼び出した順番ではないんだ。
ひよこ ひよこ
幅が広いところを直せばいいの?
ペンギン先生 ペンギン先生
調査する手掛かりになるけれど、幅が広いだけで不具合とは限らないよ。必要な処理が多い可能性もある。CPUのプロファイルだけで、外部通信の待ち時間まで説明できるとも限らない。問題に合う種類のデータを選び、変更前後の動作や性能を確かめよう。
ひよこ ひよこ
どんなツールが使えるの?
ペンギン先生 ペンギン先生
例えばGrafana Pyroscopeは、プロファイルの収集・保存・検索を行い、ほかの観測データと組み合わせられるよ。CPUやメモリ、待ちに関する種類のうち、どれが取れるかは言語や計測方法によって違う。まず調べたい問題に合う計測ができるかを確認しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「継続的プロファイリング」って出てきたら「動作中のコードが何に資源を使うか、継続して調べる」と思えばだいたいOK!
📖 おまけ:英語の意味
「Continuous Profiling」 = 継続的な性能分析
💬 Profilingは性能の特徴を調べること。問題が起きたときだけ計測するのではなく、データを継続して集めておく考え方だよ。

参考資料

← 用語集にもどる