果然生成了一个 svg 文件,在浏览器查看该图片文件,啥有用信息也没有,如下图:
为什么没有有用信息?前面有讲到过,没有用户访问 http server ,需要的程序没有运行,一直阻塞在那里等待客户端的访问连接,所以 go tool pprof 只能采集部分代码运行的信息,而这部分代码又没有消耗多少 cpu。
那怎么办?
一个方法就是用 http 测试工具模拟用户访问。这里用 https://github.com/rakyll/hey 这个工具。
安装 hey:
go get -u github.com/rakyll/hey
安装完成后,进行 http 测试:
hey -n 1000 :8090/pprof-test
同时开启另一终端执行命令:
go tool pprof :8090/debug/pprof/profile?seconds=120
等待 120s 后,采集信息完成,如下图:
输入 top 命令查看统计信息:
可以看到用户定义的一个最耗时函数是:main.cyclenum。如果要查看这个函数最耗时部分代码,可以用 list cyclenum 命令查看。
我们这里是要生成一张图片,所以输入 web 命令生成图片:
在浏览器上查看 svg 图片:
(图片较大,只截取了部分)
这张图完整的展示了 top 命令的信息。
B. web 可视化执行命令:
go tool pprof -http=":8080" :8090/debug/pprof/profile
同时开启另一终端执行测试命令:
hey -n 200 -q 5 :8090/pprof-test
上面 go tool pprof 执行完成后,会自动在浏览器打开一个 http 地址,:8080/ui/,如下图:
(截取部分图片)
这样就可以在web浏览器上查看分析数据了。
C. 火焰图用 http 测试框架 hey 访问,命令为:
hey -n 200 -q 5 :8090/pprof-test
在压测的同时开启另一终端执行命令:
go-torch -u :8090
来生成火焰图。
运行命令时在终端输出了信息 :
Run pprof command: go tool pprof -raw -seconds 30 :8090/debug/pprof/profile
可以看到 go-torch 的原始命令也是用到了 go tool pprof
上面这个命令默认生成了 torch.svg 的火焰图文件,如下:
(截取一部分图展示)
点击方块可以查看更详细信息:
参考pprof
README
Profiling Go Programs
runtime/pprof
net/http/pprof
go-torch
Flame Graph
http 压测工具 hey