数据采样方式
- untime/pprof:采集程序(非 Server)的指定区块的运行数据进行分析。
- net/http/pprof:基于 HTTP Server 运行,并且可以采集运行时数据进行分析。
- go test:通过运行测试用例,并指定所需标识来进行采集。
支持使用的模式
- Report generation:报告生成。
- Interactive terminal use:交互式终端使用。
- Web interface:Web 界面。
可以做的内容:cpu profiling(cpu分析)、内存分析、阻塞分析、互斥锁分析、Goroutine分析
使用实例 1. 通过浏览器访问
引入包
开启监听
运行程序之后 浏览器访问 http://127.0.0.1:6060/debug/pprof/
图中
- allocs:查看过去所有内存分配的样本,访问路径为
$HOST/debug/pprof/allocs。 - block:查看导致阻塞同步的堆栈跟踪,访问路径为
$HOST/debug/pprof/block。 - cmdline: 当前程序的命令行的完整调用路径。
- goroutine:查看当前所有运行的 goroutines 堆栈跟踪,访问路径为
$HOST/debug/pprof/goroutine。 - heap:查看活动对象的内存分配情况, 访问路径为
$HOST/debug/pprof/heap。 - mutex:查看导致互斥锁的竞争持有者的堆栈跟踪,访问路径为
$HOST/debug/pprof/mutex。 - profile: 默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件,访问路径为
$HOST/debug/pprof/profile。 - threadcreate:查看创建新 OS 线程的堆栈跟踪,访问路径为
$HOST/debug/pprof/threadcreate。
2.通过交互式终端访问
打开命令行输入:
go tool pprof http:``//localhost:6060/debug/pprof/profile?seconds=60
表示需要等待60s进行 cpu分析
如果是tls启动的http server 则调用命令
go tool pprof https+insecure://localhost:6060/debug/pprof/profile?seconds=60
60s结束后会进入pprof命令行交互模式,输入top10就可以查看前10个函数资源消耗。
- flat:函数自身的运行耗时。
- flat%:函数自身在 CPU 运行耗时总比例。
- sum%:函数自身累积使用 CPU 总比例。
- cum:函数自身及其调用函数的运行总耗时。
- cum%:函数自身及其调用函数的运行耗时总比例。
- Name:函数名。
查看内存分配情况:
go tool pprof http://localhost:6060/debug/pprof/heap
输入web在网页上查看内存分配情况
框越大代表所用内存越多,框中从上到下为包名、函数名、内存占比。
上述分析默认类型为inuse_space, 内存分析分类有:
- inuse_space:分析应用程序的常驻内存占用情况。
- alloc_objects:分析应用程序的内存临时分配情况。
- inuse_objects:查看每个函数分别的对应数量
- alloc_space:查看分配的内存空间大小 对应命令为-
go tool pprof -Type(参数) http://localhost:6060/debug/pprof/heap
Goroutine Profiling
命令:
go tool pprof http://localhost:6060/debug/pprof/goroutine
再输入traces命令就可以所有的调用栈,栈中调用顺序为自下而上,左边数字为使用了多少个goroutine
Mutex Profiling
runtime.SetMutexProfileFraction(1) //设置采集频率
go tool pprof http://localhost:6061/debug/pprof/mutex
调用top命令就可以看到互斥量排名:
Block Profiling
runtime.SetBlockProfileRate(1) //设置采集频率
go tool pprof http://localhost:6060/debug/pprof/block
top查看阻塞排名:
通过测试用例进行分析
运行test函数 生成相关分析文件
go test -bench=. -cpuprofile=cpu.profile
输入命令 go tool pprof 文件名分析文件
调用web查看网页端调用分析
profiling一般与性能测试一起使用,只有在高负载的情况下profiling才有意义