简介
pprof 是 golang 自带的性能分析工具,可以查看web应用的运行状态,分析程序CPU,内存,goroutine等使用情况。
golang 针对不同使用场景,提供了以下两种方式开启pprof性能分析
runtime/pprof:采集程序(非 Server)的运行数据进行分析
net/http/pprof:采集 HTTP Server 的运行时数据进行分析
- 开启pprof,举个栗子
package mainimport ("net/http"_ "net/http/pprof"
)func main () {// 通过协程开启pprof数据采集go func(){_ = http.ListenAndServe("0.0.0.0:6060", nil)}()// 业务代码doSomeThing...
}
通过嵌入以上代码,程序将会自动采集运行时指标。
- 通过web界面分析
打开浏览器,访问http://127.0.0.1:6060/debug/pprof/
/debug/pprof/Types of profiles available:
Count Profile
10 allocs
0 block
0 cmdline
93 goroutine
10 heap
0 mutex
0 profile
12 threadcreate
0 trace
full goroutine stack dumpProfile Descriptions:allocs: 过去所有内存分配的采样block: 导致同步原语阻塞的堆栈跟踪cmdline: 当前程序的命令行调用goroutine: 所有当前goroutine的堆栈跟踪heap: 活动对象内存分配的采样mutex: 互斥锁的堆栈跟踪profile: CPU使用情况threadcreate: 导致创建新OS线程的堆栈跟踪 trace:当前程序的执行跟踪.
一般goroutine导致的内存泄露,goroutine 的count数值会异常偏大。
- 通过交互命令分析
执行以下命令,等待60秒。pprof会采集CPU信息,结束后进入命令行模式
go tool pprof http://127.0.0.1:6060/debug/pprof/profile?seconds=60
Fetching profile over HTTP from http://127.0.0.1:8888/debug/pprof/profile?seconds=60
Saved profile in C:\Users\2837.GOLDENTECAD\pprof\pprof.samples.cpu.001.pb.gz
Type: cpu
Time: Oct 28, 2021 at 3:09pm (CST)
Duration: 1mins, Total samples = 30ms ( 0.05%)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof)
输入 web 命令,可在弹出的浏览器窗口看到cpu占用情况;
输入 pdf 命令,会生成一张pdf文件;
输入 top10,会显示前10 最消耗cpu的程序片断;
(pprof) top10
Showing nodes accounting for 30ms, 100% of 30ms total
Showing top 10 nodes out of 15flat flat% sum% cum cum%10ms 33.33% 33.33% 10ms 33.33% runtime.checkTimers10ms 33.33% 66.67% 10ms 33.33% runtime.lock210ms 33.33% 100% 10ms 33.33% sync.(*Pool).pin
...descriptionflat:给定函数上运行耗时flat%:同上的 CPU 运行耗时总比例sum%:给定函数累积使用 CPU 总比例cum:当前函数加上它之上的调用运行总耗时cum%:同上的 CPU 运行耗时总比例
执行以下命令, pprof会分析内存占用信息,并进入命令行模式
go tool pprof http://127.0.0.1:6060/debug/pprof/heap
Fetching profile over HTTP from http://127.0.0.1:8888/debug/pprof/heap
Saved profile in C:\Users\2837.GOLDENTECAD\pprof\pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz
Type: inuse_space
Time: Oct 28, 2021 at 3:15pm (CST)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof)
同上也可输入 web,pdf,top10 等命令查看具体信息
- 参考:
https://segmentfault.com/a/1190000016412013