Go 可视化性能分析工具

Go 可视化性能分析工具

[译] Go 可视化性能分析工具

原文: A Short Survey of PProf Visualization Tools by Jordan Crabtree

调试CPU相关的问题经常会涉及关于趋势的微妙问题。堆使用的峰值是否逐渐的增长? routine在什么地方被调用,调用的频度如何?

一图胜千言。
一张图片就可以提供很多有用的上下文信息,否则如果用语言解释起来累的半死。将pprof可视化显示可以将有用的CPU统计数据与整个时间的上下文关联起来。

pprof 是什么?

PProf是一个CPU分析器( cpu profiler), 它是gperftools工具的一个组件, 由Google工程师为分析多线程的程序所开发。
Go标准库中的pprof package通过HTTP的方式为pprof工具提供数据。
(译者注:不止这个包,runtime/pprof还可以为控制台程序或者测试程序产生pprof数据)

既然pprof数据通过HTTP提供,所以它需要在你的应用中运行一个web服务器。可以通过 import pprof的副作用(这里副作用 side-effect 是指引入这个包让其初始化,不是贬义词), 这个包就可以在缺省的web服务器中注册它的handler,并补需要其它额外的操作。

下面是一个使用pprof长时间运行的例子:

 

1

2

3

4

5

6

7

8

9

10

11

 

import (

"log"

"net/http"

_ "net/http/pprof"

)

func main(){

go func() {

log.Println(http.ListenAndServe("localhost:6060", nil))

}()

...

使用 pprof

http://blog.golang.org/profiling-go-programs

pprof能够借助grapgviz产生程序的调用图。默认情况下pprof基于对程序的30秒采样产生调用图。

  • 图中的连线代表对方法的调用, 连线上的标签代表指定的方法调用的采样值(译者注:go tool pprof显示的是调用时间)。
  • 方框的大小与方法运行的采样值的大小有关。
  • 每个方框由两个标签:一个是方法运行的时间占比,一个是它在采样的堆栈中出现的时间占比(译者注: 前者你可以看成flat时间,后者看成cumulate时间)。

在Mac上安装工具:

 

1

2

 

$ brew install gperftools

$ brew install graphviz

 

1

 

$ pprof --web localhost:6060/debug

译者注
我并没有使用上面的工具,因为Go开发环境已经集成了pprof工具,所以你不需要安装gperftools工具,而且使用的命令和上面的命令不一样。
当然graphviz是必装的。

你可以通过下面的命令采集30s的数据并生成SVG调用图:

 

1

 

go tool pprof -web http://10.75.25.126:9091/debug/pprof/profile

go-torch

http://github.com/uber/go-torch

go-torch是uber开发的一个工具,使用性能分析的专家Brendan Gregg (译者注:口口相传的性能分析的工具图就是来自他, 性能之巅一书的作者。看他的网站可以学到很多性能相关的知识)的脚本生成火焰图。

和pprof一样,它也采用30秒的采样数据生成火焰图。

  • 栈帧(Stack frame,调用链)垂直堆叠,显示栈的深度
  • 帧的宽度代表一个方法的运行的时间占比
  • 如果一个方法被调用者调用,它会显示多次,分列在不同的调用者的堆栈上。(译者注:这点和pprof工具不同,pprof至显示一个方法的框,上面的时间标签是所有的调用者调用的时间)
  • 颜色是任意的(arbitrary), 横坐标根据字母顺序排列

安装
需要安装go-torch工具和brandangregg的火焰图生成脚本:

 

1

2

3

 

$ go get github.com/uber/go-torch

$ git clone git@github.com:brendangregg/FlameGraph.git

$ export PATH-$PATH:/path/to/FlameGraph

 

1

 

go-torch --file "torch.svg" --url http://localhost:6060

GOM

http://github.com/rakyll/gom

gom是一个实时的 curses-风格的命令行工具,由Google的工程师Jaana Dogan开发。

  • 可以显示运行的goroutine和机器线程数
  • 实时更新
  • 出现可视化,gom还提供了基于文本的CPU和heap的数据
 

1

 

$ go get github.com/rakyll/gom/cmd/gom

通过 import gom, gom同样可以注册额外的handler在缺省的服务器上,就像pprof一样。

 

1

2

3

 

import (

_ "github.com/rakyll/gom/http"

)

 

1

 

$ gom --target http://localhost:6060

Debug charts

http://github.com/mkevac/debugcharts

Debug charts是由Marko Kevac开发的一个工具,使用plotly.js库来为运行的程序创建一个可视化的web视图。

  • 运行在浏览器中
  • 可视化gc pause,内存分配和cpu占用等信息
  • 实时更新

通过import debugcharts,可以为缺省的web服务器注册额外的handler,就像pprof、gom一样。

 

1

2

3

 

import (

_ "github.com/mkevac/debugcharts"

)

然后访问 localhost:6060/debug/charts就可以显示相关的实时性能图表了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值