欢迎访问我的博客,你的支持,是我最大的动力!

Golang性能分析工具PProf的使用

Linux 小马奔腾 2032℃ 评论
目录:
[显示]

Golang提供了强大的代码性能分析工具PProf,能够非常方便的监控代码运行性能。性能分析可以采用命令行方式 go tool pprof 同时也提供直观的http可视化方式,非常方便。

数据采集

性能分析基础数据的获取有三种方式:
1> runtime/pprof 包
2> net/http/pprof 包
3> go test 时添加收集参数

runtime/pprof 包的使用[不推荐使用]
针对于应用程序,通过命令行的启动参数来生成prof文件,再使用go tool pprof工具进行分析,如

运行 ./app.exe -cpuprofile=cpu.prof
分析 go tool pprof cpu.prof
注意,实际测试时得到的cpu.prof文件总是为空,原因未知

net/http/pprof 包的使用[推荐]
net/http/pprof 对 runtime/pprof 进行了封装,并在http端口上暴露出来,入口为 IP:PORT/debug/pprof/
a>若应用为web服务器,只需引入包即可 _ "net/http/pprof",会自动注册路由到/debug/pprof/
b>若为服务时程,可开启一个goroutine开启端口并监听,如
go func(){log.Println(http.ListenAndServe(":8080",nil))}()

访问 http://127.0.0.1:8080/debug/pprof/  即可实时查看性能数据,业面如下:

其中 go tool trace 工具会打开 http://127.0.0.1:1089/ 通过网页方式显示结果

go test 时添加收集参数
需要创建测试文件
go test支持的参数非常多,如
-cpuprofile=cpu.prof
-memprofile=mem.prof

数据分析

命令行方式

对生成的profile文件,可使用go tool pprof profilename来分析,如

常用的命令还有:
go tool pprof http://localhost:8080/debug/pprof/profile  默认采集需要30秒
go tool pprof http://localhost:8080/debug/pprof/heap
go tool pprof http://localhost:8080/debug/pprof/block
go tool pprof http://localhost:8080/debug/pprof/mutex

web可视化方式

在 go tool pprof 下输入 web 命令,注意默认端口为8080

go tool pprof -http=:8000 http://localhost:8080/debug/pprof/heap    查看内存使用
go tool pprof -http=:8000 http://localhost:8080/debug/pprof/profile 查看cpu占用

注意,需要提前安装 Graphviz 用于画图
下载地址:https://graphviz.gitlab.io/download/
windows:https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.zip
解压下,添加环境变量 Path下添加 C:\Go\graphviz\bin   (这里我解压在 C:\Go\graphviz 目录)
测试:命令提示符下 dot -V # 打印版本信息
若是Linux,yum install graphviz   # 默认安装版本为为2.30 依赖项较多

访问地址:http://localhost:8000/ui/

图形视图:面积超大,代表时间越长

top 视图:

火焰图:

Peek:

代码视图:

简易指标输出 expvar

在正常程序中,添加 go NewMonitor(1) 每隔指定时间在控制台输出性能数据

此外,内置包 expvar 可以在/debug/vars 中输出cmdline、memstats的json数据,若要向其中添加输出内容,如输出 num_goroutine 用于显示协程数量,核心语句如下:

import "expvar"
var goroutines = expvar.NewInt("num_goroutine")
goroutines.Set(int64(m.NumGoroutine))

 

 

转载请注明:轻风博客 » Golang性能分析工具PProf的使用

喜欢 (3)or分享 (0)