golang 性能调优分析工具 pprof(下) (2)

golang 性能调优分析工具 pprof(下)

果然生成了一个 svg 文件,在浏览器查看该图片文件,啥有用信息也没有,如下图:

golang 性能调优分析工具 pprof(下)

为什么没有有用信息?前面有讲到过,没有用户访问 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 后,采集信息完成,如下图:

golang 性能调优分析工具 pprof(下)

输入 top 命令查看统计信息:

golang 性能调优分析工具 pprof(下)

可以看到用户定义的一个最耗时函数是:main.cyclenum。如果要查看这个函数最耗时部分代码,可以用 list cyclenum 命令查看。

我们这里是要生成一张图片,所以输入 web 命令生成图片:

golang 性能调优分析工具 pprof(下)

在浏览器上查看 svg 图片:

golang 性能调优分析工具 pprof(下)

(图片较大,只截取了部分)

这张图完整的展示了 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/,如下图:

golang 性能调优分析工具 pprof(下)


(截取部分图片)

这样就可以在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 的火焰图文件,如下:

golang 性能调优分析工具 pprof(下)


(截取一部分图展示)

点击方块可以查看更详细信息:

golang 性能调优分析工具 pprof(下)

参考

pprof

README

Profiling Go Programs

runtime/pprof

net/http/pprof

go-torch

Flame Graph

http 压测工具 hey

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyfds.html