可以使用pprof来分析golang程序的CPU性能,内存占用,block死锁,Goroutine性能等,pprof一般是在需要分析代码性能的时候才加入
1.分析Gin web服务的性能#
可以使用 gin-contrib/pprof 这个工具,参考:Gin框架中使用pprof
添加依赖
1 | go get github.com/gin-contrib/pprof@v1.4.0 |
在gin的路由上添加 pprof.Register(app)
1 | package main |
启动web应用后访问如下path
1 | http://localhost:3000/debug/pprof/ |
可以看到如下页面
使用go tool pprof命令采集20s的goroutine(Goroutine 是 Go 语言中的一种轻量级线程,提供了并发执行代码的能力)指标数据,如果不设置采集时间是默认采集30s,每10ms采集一次
1 | go tool pprof --seconds 20 http://localhost:18080/debug/pprof/goroutine |
采集完毕后可以直接输入 web 来可视化查看数据,不过需要提前安装graphviz,否则会报
failed to execute dot. Is Graphviz installed? Error: exec: “dot”: executable file not found in $PATH
1 | brew install graphviz |
如果使用brew安装graphviz失败的话,可以使用官方提供的编译安装的方式,我这边就是使用的这种方法
1 | wget https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/12.0.0/graphviz-12.0.0.tar.gz |
参考:https://graphviz.org/download/source/
输入web,会弹出一个生成的svg文件,将其保存到文件后用浏览器打开,如下
当然也可以采集heap的数据
1 | go tool pprof http://localhost:18080/debug/pprof/heap |
如下
退出pprof可以输入
1 | exit |
2.分析http web服务的性能#
如果是使用go自带的http包实现的web服务,可以通过添加 net/http/pprof 的方式来开启pprof
1 | import _ "net/http/pprof" |
如下
1 | package main |
之后访问
1 | http://localhost:6060/debug/pprof/ |
3.分析CPU#
参考:pprof 性能分析