GoLand 2025.2 Help

使用 profiler 标签

Goroutines are functions or methods that run concurrently with other functions or methods. 要创建 goroutine,请使用 go 关键字,后跟函数调用(例如, go func(p string, rid int64))。 但使用大量 goroutine 会使程序更难调试。 为区分不同的 goroutine,您可以使用自定义数据为其加标签。

自 Go 1.9 起,您可以记录附加信息,以提供更丰富的执行路径上下文。 您可以将任意一组标签作为分析数据的一部分进行记录,并在之后使用这些标签来检查 profiler 的输出。

例如,您有一个队列处理器,用于处理在某处创建的事件。 处理器可以设置标签来标识这些事件的创建位置。

在调试和 core dump 分析过程中,上下文信息可能会很有帮助。 例如,您可以使用这些信息更轻松地找到特定的 goroutine。

添加标签

runtime/pprof 包提供了几个用于添加标签的新函数。 最常用的是 Do 函数。 Do 函数接收 context,向该 context 添加标签,并将新 context 传递给 f 函数。

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

Do 函数仅为当前 goroutine 写入标签。 如需在 f 函数中创建新的 goroutine,您可以将 context 作为参数传递。

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) }

在 GoLand 中查看标签

为演示目的,从 GitHub 复制以下代码示例

在调用 println("ok") 处设置断点。 要设置断点,请单击第 21 行的标记栏。 为 main 函数运行调试。 要开始调试,请单击 运行 图标(运行图标 ),该图标位于 main 函数旁的标记栏中,并选择 调试 <run_debug_configuration_name>。 在 Goroutines 列表中查看可用的 goroutine。

不带标签的 goroutine 列表

按下 Ctrl+F2 以停止调试。 删除对 f(ctx) 的调用并取消注释 Do 函数。 按下 ⌃ ⇧ D 以重新运行调试过程。 查看 Goroutines 列表。 Goroutine 名称包含以下信息: /api/profile,userId: <some number>。 您可以使用这些信息在调试或 core dump 分析期间找到特定的 goroutine。

带标签的 goroutine 列表
最后修改日期: 2025年 9月 26日