这是我参与「第五届青训营 」伴学笔记创作活动的第18天
pprof 是用于可视化和分析性能分析数据的工具,可以知道程序在什么地方耗费了CPU、内存等
使用方式
在启动程序里引入相关代码进行监听,譬如main.go文件
1. 第一步,在main.go主程序import处导包
"net/http"
_ "net/http/pprof"
2.第二步,在main.go的main函数里插入下面一段代码
go func() {
log.Println(http.ListenAndServe(":6060", nil))
}()
导出性能测试数据
方式一:在终端执行下
go tool pprof http://127.0.0.1:6060/debug/pprof/profile
然后会进入go pprof终端,在里面可以执行web和top查看各种指标,同时也会暴露一个端口可以在浏览器上查看数据,详见下面参考文档。这里查的数据不太可阅读,如果想生成火焰图建议方式二。
下面这个命令是加参数设置时间,这个时间就是采样时间,默认是30s。
go tool pprof http://localhost:6060/debug/pprof/profile\?seconds\=60
方式二:
go tool pprof -http=:8000 http://127.0.0.1:6060/debug/pprof/profile
,更推荐这种方式,http参数指定一个端口,可以打开一个webui界面,显示火焰图、调用关系图等
如果是在服务器上操作执行:
go tool pprof -http=0.0.0.0:8000 http://127.0.0.1:6060/debug/pprof/profile
同时也会产生一个xxx.pb.gz的文件,这个文件保存了我们性能测试这段采样的结果。
go tool pprof -http=:8000 xxx.pb.gz
来随时显示测试结果
注意
- 在服务器上进行性能测试时,-http=0.0.0.0:8000,http参数要加上ip,否则无法通过ip:port的方式在浏览器上访问
- 在进行后端项目性能测试的时候,放在main函数并不会捕捉到接口函数的调用,需要在go pprof采样期间对接口来一个压力测试,即循环执行几遍全部接口。
性能测试结果-火焰图
- 优化前
- 优化后