使用 pprof 进行 CPU 性能分析
收集并可视化 CPU 性能分析数据
使用 pprof 进行 CPU 性能分析 是 CoddyKit 上的免费 Go Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
pprof 是什么
net/http/pprof 和 runtime/pprof 包会公开性能分析数据,显示程序在哪里花费 CPU 时间。go tool pprof CLI 会分析这些性能分析文件。
HTTP pprof 端点
导入 _ "net/http/pprof",即可在现有 HTTP 服务器上的 /debug/pprof/ 下注册性能分析端点。
import _ "net/http/pprof"
go func() {
log.Println(http.ListenAndServe(":6060", nil))
}()捕获 CPU 性能分析
通过 HTTP 端点捕获 30 秒的 CPU 性能分析:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30基于文件的 CPU 性能分析
对于没有 HTTP 服务器的程序,请使用 runtime/pprof 写入性能分析文件:
f, _ := os.Create("cpu.prof")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
// run workload在测试中进行性能分析
使用 -cpuprofile 和 -memprofile 标志运行测试,在真实的测试负载下进行性能分析:
go test -cpuprofile cpu.prof -memprofile mem.prof -bench=. ./...go tool pprof 交互模式
打开性能分析文件,并使用交互式命令进行探索:
go tool pprof cpu.prof
(pprof) top # top functions by CPU time
(pprof) list main # annotated source
(pprof) web # call graph in browser火焰图
使用 -http=:8080 生成火焰图(需要 graphviz),以打开交互式网页界面:
go tool pprof -http=:8080 cpu.prof解读 top 输出
top 会按自身时间(函数内部耗时)和累计时间(包括被调用函数的耗时)对函数排序。请重点关注自身时间较高的函数,以寻找直接的优化机会。
协程性能分析
/debug/pprof/goroutine 端点会显示所有协程的堆栈跟踪。请使用它检测协程泄漏或被阻塞的协程。
go tool pprof http://localhost:6060/debug/pprof/goroutine持续性能分析
对于生产系统,请使用持续性能分析服务(Pyroscope、Datadog、Google Cloud Profiler)捕获性能分析文件,而无需停止服务。
CI 中的 pprof
比较代码两个版本的性能分析文件,在性能回退进入生产环境前将其检测出来。
快速检查
pprof top 输出中的 "self" 列表示什么?
回顾:使用 pprof 进行 CPU 性能分析
关键要点:
- 为 HTTP 端点导入 net/http/pprof;为文件导入 runtime/pprof
- 使用 go tool pprof -http=:8080 打开火焰图界面
- top:自身时间 = 直接开销;累计时间 = 包括被调用函数在内的总开销
- 使用 go test -cpuprofile 进行基准测试性能分析
常见问题解答
「使用 pprof 进行 CPU 性能分析」课时是免费的吗?
是的 — 「使用 pprof 进行 CPU 性能分析」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「使用 pprof 进行 CPU 性能分析」这节课中我会学到什么?
收集并可视化 CPU 性能分析数据 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「使用 pprof 进行 CPU 性能分析」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 testing.B 编写基准测试
- 使用 pprof 进行 CPU 性能分析
- 堆与内存分配性能分析
- 执行跟踪