使用火焰图对Go项目进行性能分析
在 Golang 开发中,性能分析是确保应用高效运行的重要环节。这里介绍一下如何使用 gin-contrib/pprof 在 Gin 应用中集成性能剖析工具,并结合 Graphviz 生成图形化的性能分析结果,以便帮助开发者更好地理解和优化 Go 应用的性能。
集成 gin-contrib/pprof
pprof 是 Go 语言自带的性能分析工具,它可以帮助开发者分析程序的 CPU 和内存使用情况,以及程序的运行时性能。通过 pprof,开发者可以获得程序的详细性能数据,包括但不限于:
- 程序的 CPU 使用情况,包括哪些函数占用了最多的 CPU 时间。
- 内存使用情况,包括哪些函数分配了最多的内存。
- goroutine 的数量和状态。
- 阻塞操作的分析。
- 垃圾回收的统计信息。
安装
使用以下命令安装 pprof 中间件:
go get github.com/gin-contrib/pprof
在 Gin 应用中注册 pprof 路由:
找到用于创建一个新的 Gin 路由器的函数:gin.Default() ,将pprof 路由注册在这段代码下面:
func main() {
r := gin.Default()
// 注册 pprof 路由
pprof.Register(r)
// 其他路由
// 启动服务
r.Run(":8080")
}
⚠️注意! gin.Default() 函数实际上等同于 gin.New() 然后链式调用 Use 方法添加上述两个中间件,也就是说等效于以下代码:
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())
同理可得,将pprof 路由注册在这段代码下面也可以得到同样的效果
访问性能分析接口:
启动代码后,可以通过以下路径访问性能分析数据:
- /debug/pprof/heap:内存堆使用情况
- /debug/pprof/goroutine:查看所有 goroutine 信息
- /debug/pprof/block:查看阻塞操作
- /debug/pprof/profile:生成 CPU 性能分析数据
../server % go tool pprof http://localhost:8080/debug/pprof/heap
Fetching profile over HTTP from http://localhost:8080/debug/pprof/heap
Saved profile in /xxx/xxx/pprof/pprof.__debug_bin1079099528.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz
File: __debug_bin1079099528
Type: inuse_space
Time: Dec 13, 2024 at 5:13pm (CST)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof)
🧠出现类似的结果,证明已经成功地使用 go tool pprof 访问了 Gin 应用的性能分析接口,并获取了内存堆使用情况的分析数据。现在,我们已经进入了 pprof 的交互式界面
🧠之后可以通过命令来进一步操作,例如输入 top10 查看消耗最多内存的前10个函数等
在pprof交互模式中生成火焰图
🧠进入交互模式后,只要输入“web”命令,就可以生成当前视图的火焰图,并尝试在默认浏览器中打开
🧠但是前提是需要我们安装了Graphviz,并且pprof工具可以正确调用Graphviz的dot命令
安装Graphviz
如果使用的是mac电脑并且安装了Homebrew,那么可以之间运行命令:
brew install graphviz
windoes需要从官网进行下载:graphviz官网
其他的请自行百度。。。
之后通过下面的命令查看是否安装成功:
dot -V
输出了版本信息及表明已经安装成功
原文地址:https://blog.csdn.net/qq_63730529/article/details/144455734
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!