前言
GolangGopprofpprofEchoGinpprofgRPC
有兴趣追更的同学欢迎微信关注「网管叨bi叨」
Golangpprof
profileprofilingpprofprofprofileprofile
Go
- CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据
- Memory Profile(Heap Profile):报告程序的内存使用情况
- Block Profile:报告导致阻塞的同步原语的情况,可以用来分析和查找锁的性能瓶颈
- Goroutine Profile:报告 goroutines 的使用情况,有哪些 goroutine,它们的调用关系是怎样的
工具型应用的性能分析
如果你的应用是工具类应用,执行完任务就结束退出,可以使用
pprof.StartCPUProfile()w io.WriterStopCPUProfile()
main.go
应用执行结束后,就会生成一个文件,保存了我们应用的 CPU使用情况数据。
WriteHeapProfilestartstop
我们的文章会把重点篇幅放在服务型应用的性能分析,所以关于工具型应用的性能分析就说这么多。
服务型应用性能分析
gRPCnet/http/pprof
http.DefaultServeMuxhttp.ListenAndServe("0.0.0.0:8000", nil)net/http/pprof
ServerMux
http://localhost/debug/pprof
这个路径下几个需要重点关注的子页面有:
/debug/pprof/profile?=seconds=60/debug/pprof/heap/debug/pprof/block/debug/pprof/goroutines
1.11go toolpprofpprof
使用go tool pprof
go tool pprofpprofHTTPpprofpprofhelp
pprof --help
CPU性能分析
CPUgo tool pprof/debug/pprof/profile
?seconds=60
help
pprofgraphvizbrew install graphviz
列出最耗时的地方
topN
累加值 cumulative
生成函数调用图
pproftoplistdisasmsvggifpng
webwebsvggraphviz

图中每个方框对应应用程序运行的一个函数,方框越大代表函数执行的时间越久(函数执行时间会包含它调用的子函数的执行时间,但并不是正比的关系);方框之间的箭头代表着调用关系,箭头上的数字代表被调用函数的执行时间。
这里还要提两个比较有用的方法,如果应用比较复杂,生成的调用图特别大,看起来很乱,有两个办法可以优化:
web funcNamego tool pprof--nodefration--nodefration=0.05
分析函数性能
pproflist
内存性能分析
/debug/pprof/profile/debug/pprof/heap
top N
CPU
websvg
--inuse_objects--alloc-space
go-torch 和火焰图
profilingpprofprofiling

火焰图 svg 文件可以通过浏览器打开,它对于调用图的优点是:可以通过点击每个方块来分析它上面的内容。
火焰图的调用顺序从下到上,每个方块代表一个函数,它上面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用的长短。火焰图的配色并没有特殊的意义,默认的红、黄配色是为了更像火焰而已。
http://localhost/debug/pprof/profile
-u --url-s --suffix/debug/pprof/profile--seconds
$PATH
总结
pprofpprofprofilepprof
pprof
pprofPostmanJmeterpprof
EchoGinpprofpprofgRPC
微信关注公众号「网管叨bi叨」每周教会你一个进阶知识。
相关阅读