SYSTEM コマンドも用意されています。
割り当てのサンプリングとヒーププロファイルの書き出し
jemalloc で割り当てをサンプリングしてプロファイリングするには、環境変数 MALLOC_CONF を使用してプロファイリングを有効にした状態で ClickHouse/Keeper を起動する必要があります。
jemalloc は割り当てをサンプリングし、その情報を内部に保存します。
次を実行すると、jemalloc に現在のプロファイルを flush させることができます。
- ClickHouse
- Keeper
/tmp/jemalloc_clickhouse._pid_._seqnum_.heap に生成されます。ここで、_pid_ は ClickHouse の PID、_seqnum_ は現在のヒーププロファイルのグローバルなシーケンス番号です。
Keeper の場合、デフォルトのファイルは /tmp/jemalloc_keeper._pid_._seqnum_.heap で、同じルールに従います。
別の保存先は、MALLOC_CONF 環境変数に prof_prefix オプションを追加して指定できます。
たとえば、ファイル名のプレフィックスを my_current_profile として /data フォルダーにプロファイルを生成したい場合は、次の環境変数を指定して ClickHouse/Keeper を実行できます。
ヒーププロファイルの分析
jemalloc の jeprof というツールを使用できます。インストール方法はいくつかあります。
- システムのパッケージマネージャーを使用する
- jemalloc リポジトリをクローンし、ルートフォルダーで
autogen.shを実行する。これにより、binフォルダー内にjeprofスクリプトが生成されます
jeprof はスタックトレースの生成に addr2line を使用するため、非常に時間がかかることがあります。
その場合は、このツールの代替実装をインストールすることを推奨します。jeprof を使うと、ヒーププロファイルからさまざまなフォーマットを生成できます。
使用方法や、このツールで利用できる各種オプションについては、jeprof --help を実行して確認することを推奨します。
一般に、jeprof コマンドは次のように使用します。
base 引数を設定できます。
例
- 各プロシージャを1行ずつ記述したテキストファイルを生成する場合:
- コールグラフ付きのPDFファイルを生成するには:
フレームグラフの生成
jeprof を使うと、フレームグラフの作成に使うコラプスされたスタックを生成できます。
--collapsed 引数を使用する必要があります。
flamegraph.pl というスクリプトが含まれています。
実行時に allocation profiler を制御する
- ClickHouse
- Keeper
- ClickHouse
- Keeper
prof_active オプションを設定することで、プロファイラの初期状態を制御することもできます。
たとえば、起動時には割り当てをサンプリングせず、起動後にだけ行いたい場合は、後からプロファイラを有効にできます。次の環境変数を指定して ClickHouse/Keeper を起動できます:
プロファイラの追加オプション
jemalloc には、プロファイラに関連するさまざまなオプションがあります。これらは、MALLOC_CONF 環境変数を変更することで制御できます。
たとえば、アロケーションのサンプル間隔は lg_prof_sample で制御できます。
N バイトごとにヒーププロファイルをダンプしたい場合は、lg_prof_interval を有効にします。
オプションの一覧を完全に確認するには、jemalloc のリファレンスページを参照することをおすすめします。
その他のリソース
jemalloc に関連するメトリクスをさまざまな形で公開しています。
システムテーブル asynchronous_metrics
システムテーブル jemalloc_bins
Prometheus
asynchronous_metrics の jemalloc 関連メトリクスはすべて、ClickHouse と Keeper の両方で Prometheus エンドポイント経由でも公開されています。
リファレンス
Keeper における jmst 4LW コマンド
jmst 4LW コマンドをサポートしています。