pprof 是 Go 官方性能分析工具链。接入方式:HTTP 服务 import _ "net/http/pprof" 后在 /debug/pprof/ 暴露端点;非 HTTP 程序用 runtime/pprof 手动采集到文件。常用 profile:heap(内存分配)、goroutine(协程堆栈)、profile(CPU,默认采样 30 秒)、block(阻塞)、mutex(锁竞争)。
典型流程:
# CPU
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
# 堆内存
go tool pprof http://localhost:6060/debug/pprof/heap
# goroutine 全量堆栈(查泄漏)
curl 'http://localhost:6060/debug/pprof/goroutine?debug=2'
进入交互界面后:top 看热点函数,web 生成调用图(需 graphviz),peek 看函数调用上下游,list 看源码级耗时。分析 CPU 时区分 flat(自身耗时)和 cum(含下游累计);分析内存时区分 inuse_space(当前存活)和 alloc_space(历史分配总量,定位 GC 压力源)。对比两个时间点的 profile 快照(pprof -base)可定位增长来源。
易错点:生产采集 CPU profile 有少量开销但通常安全;goroutine 泄漏要看 goroutine profile 而非 heap。追问方向:trace 工具(go tool trace)看调度延迟、火焰图、fgprof 对 off-CPU 的补充。