0Pricing
Go Academy · 课时

执行跟踪

使用 go tool trace 进行 Goroutine 级别的分析

执行跟踪 是 CoddyKit 上的免费 Go Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。

什么是执行追踪

Go 执行追踪器会记录协程调度、GC 事件、系统调用和堆增长的时间线。它能以可视化方式呈现并行性和延迟,这是 CPU 或堆性能分析无法提供的。

捕获追踪

通过 HTTP 端点捕获追踪:

curl http://localhost:6060/debug/pprof/trace?seconds=5 -o trace.out
go tool trace trace.out

基于文件的追踪

使用 runtime/trace 以编程方式记录追踪:

f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()
// run workload

go test -trace

在测试或基准测试运行期间捕获追踪:

go test -trace trace.out -bench=. ./...
go tool trace trace.out

追踪查看器

追踪查看器(go tool trace)会在浏览器中打开,显示协程时间线、GC 事件、堆大小,以及任意时刻每个协程的堆栈跟踪。

协程分析

协程分析视图按函数对协程进行分组,并显示每个协程在以下状态中所处的时长:运行、可运行(等待 P)、阻塞(通道、互斥锁或系统调用)以及休眠。

查找调度器延迟

“可运行”时间较长意味着协程已就绪但尚未被调度。这表明有过多协程在争用 GOMAXPROCS 个 P,或者进程 CPU 资源不足。

GC 的影响

GC 的全局暂停会在所有协程上显示为灰色条。暂停时间过长或 GC 过于频繁,通常表示分配过多——请结合堆性能分析来减少分配。

用户注释

使用 trace.WithRegion 和 trace.Log 向追踪中添加自定义区段,为您自己的代码部分添加注释,以便更轻松地进行分析。

trace.WithRegion(ctx, "parse request", func() {
    parseRequest(req)
})

任务与区域

trace.NewTask 会将相关区域归入命名任务,使您能够测量跨多个协程的逻辑操作的端到端延迟。

ctx, task := trace.NewTask(ctx, "handle request")
defer task.End()

追踪与性能分析

CPU 性能分析:哪些函数会随时间消耗 CPU。堆性能分析:哪些函数会分配内存。追踪:协程何时运行、阻塞,以及 GC 如何交错进行——不同工具用于回答不同问题。

快速检查

执行追踪中的“可运行”协程状态表示什么?

回顾:执行追踪

关键要点:

  • go tool trace 显示协程时间线、GC 事件和调度情况
  • 通过 HTTP 端点或 runtime/trace 包捕获追踪
  • 可运行时间 → 调度器竞争;GC 暂停 → 分配过多
  • 用户注释(WithRegion、NewTask)用于标记您自己的代码部分

常见问题解答

「执行跟踪」课时是免费的吗?

是的 — 「执行跟踪」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。

「执行跟踪」这节课中我会学到什么?

使用 go tool trace 进行 Goroutine 级别的分析 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Go Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「执行跟踪」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Go Academy 课中编写并运行代码吗?

能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 testing.B 编写基准测试
  2. 使用 pprof 进行 CPU 性能分析
  3. 堆与内存分配性能分析
  4. 执行跟踪
← 返回 Go Academy