pprof是个很好的golang性能分析工具,不用安装什么工具和环境就可以直接用
用法:
1,在需要做性能分析的方法内添加如下代码,并引入对应的包
_ "net/http/pprof" // 引入 pprof 包
func test(){
go func() {
fmt.Println(http.ListenAndServe("http://localhost:6060", nil))
}()
//业务代码
}
注解:
http://localhost:部署IP(本地代理直接用localhost),部署到环境可以不用,默认部署地址ip
6060:端口可自定义
2,依据部署环境判断是否需要开通6060端口
3,浏览器直接调用 http://localhost:6060/debug/pprof 即可看到pprof生成的各个指标:
- allocs:查看过去所有内存分配的样本(历史累计)。
- block:查看导致阻塞同步的堆栈跟踪(历史累计)。
- cmdline: 当前程序的命令行的完整调用路径(从程序一开始运行时决定)。
- goroutine:查看当前所有运行的 goroutines 堆栈跟踪(实时变化)。
- heap:查看活动对象的内存分配情况(实时变化)。
- mutex:查看导致互斥锁的竞争持有者的堆栈跟踪(历史累计)。
- profile: 默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件(从开始分析,到分析结束)。
- threadcreate:查看创建新 OS 线程的堆栈跟踪。
- trace:执行跟踪程序 详见:https://mp.weixin.qq.com/s/I9xS
4,如果只关注某一指标:如cpu可直接调用:
http://localhost:6060/debug/pprof/profile?seconds=10
seconds=10表示采集10s内的cpu占用,可以改为想要采集的时间
注意:1,一旦开始运行 4 中的指标采集后,一定要触发想要采集的方法事件
2,调用后生成profile文件,可用 go tool pprof profile命令打开,top查看,top默认查看 前10条,想查看更多数据,直接topN,如前20:top20