用pprof对Golang应用程序进行性能分析和可视化

94 阅读2分钟

在这个例子中,我将向你展示如何使用 Golang 的pprof包,以收集和可视化应用程序的性能数据。这些发现可以用来识别瓶颈和提高整体性能。你甚至可以看到哪一行花了多长时间。我指的是逐行的性能分析我个人设法将我的一个API的性能提高了60%。我建议你阅读一篇非常有价值的高性能围棋工作坊的文章。

安装

完整的安装指南在这里,但我认为只要运行go get -u github.com/google/pprof 命令就足够了。

应用程序

假设我们有一个HTTP API,其基本信息如下。

Path: /Users/inanzzz/Language/Go/src/github.com/inanzzz/game

路由

在你的HTTP服务器的路由器上添加以下路由。你可以打开corepprof.go文件,看看这些路由的作用。

// router := github.com/julienschmidt/httprouter

导入_ "net/http/pprof" 包。就这样了!我们可以继续收集和可视化数据了。

数据的生成和收集

你必须不断地向你的一个端点发送许多请求,以便pprof能够收集数据,否则应用程序很快就会存在,你就没有时间收集数据。为此,我使用了一个k6脚本,但如果你愿意,你也可以在一个循环中使用cURL 命令。我将向GET http://0.0.0.0:8000/home 端点发送100个并发请求,持续10秒。

让我们发送一些请求并收集CPU数据。一旦你运行pprof 命令,你就必须运行你的请求脚本,或者反过来,只要你的速度快就可以了

发送请求

$ k6 run scripts/k6/home.js

收集数据

这将运行一段时间,所以要有耐心。

$ go tool pprof /Users/inanzzz/Language/Go/src/github.com/inanzzz/game/bin/game http://0.0.0.0:8000/debug/pprof/profile

数据的可视化

这个命令将打开你的浏览器http://localhost:8080/ui/ ,在那里你将看到图表。

$ go tool pprof -http=:8080 /Users/inanzzz/pprof/pprof.game.samples.cpu.017.pb.gz

这个命令只用于 "跟踪 "图的数据生成和可视化。

// Generate data.