go-pprof
golang pprof
标准库安装
package main
import (
"net/http"
_ "net/http/pprof"
)
func main() {
go func() {
// 在应用运行时启动 pprof 监听
http.ListenAndServe("localhost:8080", nil)
}()
// 模拟业务逻辑
select {}
}
//启动程序后,访问http://localhost:6060/debug/pprof/
Gin集成
//安装依赖
go get -u github.com/gin-contrib/pprof
//项目中引入
package main
import (
"github.com/gin-contrib/pprof"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// 启用 pprof 路由
pprof.Register(r)
// 模拟业务路由
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run(":8080") // 启动服务
}

| Syntax | Description |
|---|---|
| allocs | 查看历史累计的所有内存分配的采样数据 |
| block | 查看历史累计的导致同步原语阻塞的堆栈跟踪 |
| cmdline | 包含进程的完整命令行信息,通常用于记录程序启动时的命令行参数 |
| goroutine | 实时查看当前所有运行的 goroutines 堆栈跟踪 |
| heap | 实时查看活动对象的内存分配情况 |
| mutex | 查看历史累计的导致互斥锁的竞争持有者的堆栈跟踪 |
| profile | 进行 30s 的 CPU Profiling,浏览器会转圈,30s 后下载一个分析用的 profile 文件 |
| threadcreate | 查看创建新 OS 线程的堆栈跟踪 |
| trace | 程序执行 trace, 和其他样本数据不同的是,这个需要使用 go tool trace 来分析。trace 是一种更详细的性能分析工具,用于跟踪程序的执行过程,包括函数调用、协程切换等。 |
方框中
pprof
| Syntax | Description |
|---|---|
| flat | 是我们最关注的指标,它代表自身耗时,不包含内部调用。 |
| flat% | 自身耗时相对于总耗时的百分比 |
| cum | 自身耗时加上内部函数调用的总耗时 |
| cum% | 自身耗时加上内部函数调用的总耗时相对于总耗时的百分比 |
| sum% | 前 N 行的 flat% 之和。对于上述例子的第四行 58.88=19.63+16.82+14.95+7.48 |
//打开浏览器并带着view选项
go tool pprof -http=:8080 /Users/mac/pprof/pprof.samples.cpu.003.pb.gz
go tool pprof http://localhost:8080/debug/pprof/profile?seconds=30
1. 基本参数
-http=[host:port]
启动本地 Web 服务,提供交互式可视化分析界面(支持火焰图、 调用关系图等视图切换)
go tool pprof -http=:8080 profile.prof # 访问 http://localhost:8080
-text
生成文本格式的性能报告,按函数耗时排序(默认输出前 10 项)
go tool pprof -text profile.prof
-proto
生成二进制格式的协议缓存文件(.pb.gz),用于后续进一步分析
go tool pprof -proto profile.prof > output.pb.gz
2. 数据采集参数
-seconds=N
指定 CPU 分析的采样时长(单位:秒),仅适用于实时采集的场景
go tool pprof -seconds=30 http://localhost:6060/debug/pprof/profile
-debug=N
控制调试信息输出级别(0 为静默,1 显示基本信息,2 显示详细日志