自学内容网 自学内容网

使用火焰图对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)!