プロセスプロファイル (Proc Profile)
プロセスプロファイル (Proc Profile) 機能は、StarRocks のフロントエンド (FE) およびバックエンド (BE) プロセスのパフォーマンスプロファイルを収集し、視覚化するための組み込みメカニズムを提供します。CPU、メモリ割り当てのフレームグラフを生成することで、開発者や管理者は、Web UI から直接、パフォーマンスのボトルネック、高いリソース使用率、および複雑なランタイムの問題を診断できます。
概要
プロセスプロファイリングは、一定期間にわたる StarRocks プロセスの状態をキャプチャするシステムレベルの診断ツールです。個々の SQL 実行に焦点を当てるクエリプロファイル (Query Profile) とは異なり、プロセスプロファイルは、バックグラウンドタスク、メタデータ管理、内部同期など、プロセスが行っていることの全体像を提供します。
画面例
プロセスプロファイルインターフェースは、StarRocks Web UI の proc profiles タブに統合されています。
プロファイルリストビュー
メインページには、選択したノードの収集済みプロファイルファイルの一覧が表示されます。 上部のタブを使用して、FE と異なる BE ノードを切り替えることができます。

フレームグラフ (Flame Graph)

フレームグラフ(Flame Graph)は、プログラム内の各関数またはコードパスのリソース消費分布を示すための可視化分析ツールです。これは、スタックされた長方形(通常は水平に配置された「炎」の形)でコールスタックを表します。
- 各ボックスは、関数(またはメソッド)の呼び出しを表します。
- ボックスの幅は、その関数によって消費されたリソースの量(CPU時間、メモリ割り当て頻度、ロック待機時間など)を表します。幅が広いほど、より多くのリソースが消費されて います。
- 垂直方向のスタックは呼び出し関係を表し、最下層がエントリ関数で、その上に子関数がスタックされます。
フレームグラフは、開発者や運用担当者が、システム内で最もリソースを消費しているコードホットスポット、パフォーマンスのボトルネック、および呼び出しパスを迅速に特定するのに役立ち、パフォーマンスチューニングやトラブルシューティングに一般的に使用されます。
StarRocksのプロセスプロファイル機能では、フレームグラフを使用して、CPU使用率、メモリ割り当て、および(BEシナリオにおける)ロック競合のデータ分布を直感的に表示し、最も時間のかかるコードセグメントや呼び出しパスの特定を支援します。
使用シーン
- CPU ホットスポット分析: どのコードパスや関数が最も多くの CPU サイクルを消費しているかを特定します。
- メモリ割り当てプロファイリング: メモリが頻繁に割り当てられている場所を追跡し、潜在的なメモリ圧迫の原因を見つけます。
- 研究開発のトラブルシューティング: 外部のプロファイリングツールを必要とせずに、本番環境での複雑なバグやパフォーマンスの低下を分析するのを支援します。
機能説明
使用方法
- アクセス: StarRocks Web UI (デフォルトポート 8030) を開き、proc profiles タブをクリックします。
- ノードの選択: FE タブまたは特定の BE ノードタブを選択します。
- 視覚化: 任意の項目の View リンクをクリックします。
- FE の場合、事前生成された HTML フレームグラフを抽出して表示します。
- BE の場合、生の
pprofファイルをオンザフライで SVG フレームグラフに変換することがあります (変換を実行するため、最初の表示には数秒かかる場合があります)。
- 操作: フレームグラフを使用して、特定のコールスタックへのズーム、関数名の検索、またはスタック深度の分析を行います。
提供される情報
- タイプ (Type): CPU、メモリ割り当て (Memory)、またはロック競合 (Contention、BE のみ)。
- タイムスタンプ (Timestamp): プロファイルの収集が完了した日時。
- ファイルサイズ (File Size): 圧縮されたプロファイルデータのサイズ。
- フレームグラフ (Flame Graph): 各ボックスの幅が相対的なリソース消費 (CPU 時間、割り当て頻度、またはロック待ち時間) を表す階層的な視覚化。
関連パラメータ設定
このプロファイリング機能は関数レベルのサンプリングを行い、フレームグラフによって可視化します。
フロントエンド (FE) の設定
FE のプロファイリングは内部デーモンによって管理され、データ収集には AsyncProfiler を使用します。これらは fe.conf で設定できます。
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
proc_profile_cpu_enable | true | FE の自動 CPU プロファイリングを有効にするかどうか。 |
proc_profile_mem_enable | true | FE の自動メモリ割り当てプロファイリングを有効にするかどうか。 |
proc_profile_collect_time_s | 120 | 各プロファイル収集の期間 (秒)。 |
proc_profile_jstack_depth | 128 | 収集する最大 Java スタック深度。 |
proc_profile_file_retained_days | 1 | プロファイルファイルの保持日数。 |
proc_profile_file_retained_size_bytes | 2147483648 (2GB) | 保持されるプロファイルファイルの最大合計サイズ。 |
バックエンド (BE) の設定
BE プロファイルは、内蔵の gperftools を使用して収集され、通常、バックグラウンドスクリプトまたは手動トリガーを介して収集されます。収集されたデータは、pprof ツールを使用してフレームグラフに変換されます。
be.conf での設定
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
brpc_port | 8060 | 収集スクリプトが BE からデータを取得するために使用するポート。 |
sys_log_dir | ${STARROCKS_HOME}/log | 収集されたプロファイルを保存するためのベースディレクトリ (proc_profile サブディレクトリに保存されます)。 |
flamegraph_tool_dir | ${STARROCKS_HOME}/bin/flamegraph | 変換ツール (pprof、flamegraph.pl) へのパス。 |
COLLECT_BE_PROFILE_INTERVAL | 60 | collect_be_profile.sh スクリプトをデーモンモードで実行する場合の収集間隔 (秒)。 |
BE 収集スクリプトのオプション
collect_be_profile.sh スクリプトは、以下のコマンドラインオプションをサポートしています。
| オプション | デフォルト値 | 説明 |
|---|---|---|
--profiling-type | cpu | 収集するプロファイルのタイプ: cpu、contention、または both。 |
--duration | 10 | 各プロファイル収集の期間 (秒)。 |
--interval | 60 | デーモンモードでの収集間隔 (秒)。 |
--cleanup-days | 1 | プロファイルファイルの保持日数。 |
--cleanup-size | 2147483648 (2GB) | 保持されるプロファイルファイルの最大合計サイズ。 |
--daemon | - | 収集スクリプトをバックグラウンドでデーモンモードとして実行します。 |
手動 BE 収集の例
提供されているスクリプトを使用して、BE 収集をトリガーまたはスケジュールできます。
# 30 秒間の CPU プロファイルを収集する
./bin/collect_be_profile.sh --profiling-type cpu --duration 30
# デーモンモードで実行し、1 時間ごとにプロファイルを収集する
./bin/collect_be_profile.sh --daemon --interval 3600