引言
最近学习go的性能分析工具,
pprof
和
go-torch
,这篇文章是本人对两个公爵安装,使用的总结。
pprof
参考
https://studygolang.com/articles/12970
step1
mac上安装
graphviz
,可以通过brew安装,用于生成
.svg
格式图形数据
brew install graphviz
step2
开启一个pprof的服务
step3
利用
go tool pprof
工具采集运行数据,此时可以加大web压力,增加采点数据,让采集结果更有效
go tool pprof http://127.0.0.1:8080/debug/pprof/profile
(好像可以
--second 60
/
-t 60
设置采样时间,默认30s)
step4
此时会生成一个.pb.gz的文件,也就是分析结果,同时进入pprof命令,
可以用
top
,
tree
,
web
命令查看分析结果,其中
web
命令需要安装step1 安装graphviz工具,这个工具会把数据生成
svg
图表格式。
火焰图
go tool pprof
的
web
命令可以直观地得到服务调用地trace流程图,但是当调用链条比较复杂时候,看起来就比较麻烦了。
需要用
go-torch
火焰图帮助梳理
步骤
step1
安装配置
FlameGraph
git clone https://github.com/brendangregg/FlameGraph.git
然后到
FlameGraph
安装目录下配到环境变量
PATH=$PATH:/Users/huangzhilang/mygo/src/github.com/brendangregg/FlameGraph
step2
安装
go-torch
go get -v github.com/uber/go-torch
step 3
在服务中定义监控数据项的路由
import (
"net/http"
"net/http/pprof"
)
...
http.HandleFunc("/debug/pprof/block", pprof.Index)
http.HandleFunc("/debug/pprof/goroutine", pprof.Index)
http.HandleFunc("/debug/pprof/heap", pprof.Index)
http.HandleFunc("/debug/pprof/threadcreate", pprof.Index)
step4
启用go-torch采集数据并生成svg的火焰图
如:cpu火焰图
go-torch -u http://<ip>:<port>/debug/pprof/ -p > cpu-local.svg
内存火焰图
go-torch -u http://<ip>:<port>/debug/pprof/heap -p > heap-local.svg