IntelliJ IDEA 2020.3 ヘルプ

プロファイラーラベルの使用

ゴルーチンは、他の関数またはメソッドと同時に実行される関数またはメソッドです。ゴルーチンを作成するには、go キーワードに続けて関数呼び出しを使用します(たとえば、go func(p string, rid int64) )。ただし、多数のゴルーチンを使用すると、プログラムのデバッグが困難になります。ゴルーチンを区別するために、ゴルーチンにカスタムデータのラベルを付けることができます。

Go 1.9 以降、追加の情報を記録して、実行パスに関するより多くのコンテキストを提供できます。ラベルのセットをプロファイリングデータの一部として記録し、後でこれらのラベルを使用してプロファイラーの出力を調べることができます。

例: どこかで作成されたイベントを処理するキューハンドラーがあります。ハンドラーは、これらのイベントが作成された場所を識別するラベルを設定できます。

デバッグおよびコアダンプ分析中に、コンテキスト情報が役立つ場合があります。例: この情報を使用して、特定のゴルーチンをより簡単に見つけることができます。

ラベルを追加する

runtime/pprof パッケージには、ラベルを追加するために使用できるいくつかの新しい関数があります。最も一般的なのは Do 関数です。 Do 関数はコンテキストを取得し、このコンテキストにラベルを追加して、新しいコンテキストを f 関数に渡します。

func Do(ctx context.Context, labels LabelSet, f func(context.Context))

Do 関数は、現在のゴルーチンにのみラベルを書き込みます。f 関数で新しいゴルーチンを作成する場合、引数としてコンテキストを渡すことができます。

func main() { ctx := context.Background() for i := 0; i < 10; i++ { labels := pprof.Labels("path", "/api/profile", "userId", strconv.Itoa(rand.Intn(100))) go pprof.Do(ctx, labels, f) } time.Sleep(time.Second) }

IntelliJ IDEA でのラベルの表示

説明のために、GitHub から(英語)次のコード例(英語)をコピーします。

println("ok") が呼び出される場所にブレークポイントを設定します。ブレークポイントを設定するには、21 行目のガターをクリックします。main 関数のデバッグを実行します。デバッグを開始するには、main 関数の近くのガターにある実行アイコン( the Run icon )をクリックし、デバッグ <run_debug_configuration_name> を選択します。ゴルーチンリストから、使用可能なゴルーチンを確認します。

List of goroutines without labels

Ctrl+F2 を押してデバッグを停止します。 f(ctx) 呼び出しを削除し、Do 関数のコメントを外します。 Ctrl+Shift+D を押して、デバッグプロセスを再実行します。ゴルーチンリストを調べます。Goroutine 名には、次の情報が含まれています。/api/profile, userId: <some number> この情報を使用して、デバッグまたはコアダンプ分析中に特定のゴルーチンを見つけることができます。

List of goroutines with labels