Go tool pprof 性能监控调试工具基本使用说明

Go tool pprof 性能监控调试工具基本使用说明

Go tool pprof 使用方式

go 中有 pprof 包来做代码的性能监控主要涉及两个 pkg:

1
2
3
4
5
6
7
8
9
10
11
#web服务器:
import (
"net/http"
_ "net/http/pprof"
)

#一般应用程序(实际应用无web交互)
import (
"net/http"
_ "runtime/pprof"
)

net/http/pprof 中只是使用 runtime/pprof 包来进行封装了一下,并在 http 端口上暴露出来。

Go tool pprof 辅助工具安装(图形工具 graphviz 为例)

  • __Windows__:
    1.官方下载安装包: http://www.graphviz.org/download/
    下载 Stable 稳定版本(.msi)
    2.配置 PATH 系统环境变量:
    C:\Program Files (x86)\Graphviz2.38\bin

  • Linux(例:Centos)

方式 1).添加 repo 依赖 http://204.178.9.49/graphviz-rhel.repo

1
2
3
yum list available 'graphviz*'
yum install 'graphviz*' --skip-broken
#备注:--skip-broken可选:跳过错误依赖,不加这个参数会提示安装包依赖错误,因为这里并不需要其它的安装包,所以跳过即可。

–skip-broken 可选:跳过错误依赖,不加这个参数会提示安装包依赖错误,因为这里并不需要其它的安装包,所以跳过即可。

方式 2).源码包编译安装
./configure
make
make install

  • MacOS:
    brew install graphviz

Go tool pprof 常用基本调试基本命令(默认 30s 采集时间,可通过–seconds)

HTTP 场景(参数可选:–text):

Heap profile:

1
go tool pprof --text http://localhost:8080/debug/pprof/heap  

CPU profile:

1
go tool pprof --text http://localhost:8080/debug/pprof/profile  

Goroutine blocking profile:

1
go tool pprof --text http://localhost:8080/debug/pprof/block  

1.实时通过地址查看浏览器: http://localhost:8080/debug/pprof/;
2.通过生成的 profile 文件分析;
选择指定的 profile 压缩 gz 文件(.gz),使用 go tool pprof 进入

1
2
3
4
5
go tool pprof http://localhost:8080/debug/pprof/profile
#结束后直接进入交互:
(pprof)
web
(pprof)

如查看历史调试文件信息,通过指定的 profile 文件进入即可:
go tool pprof [*.gz]

pprof 交互基本命令:web 直接生成 web 浏览器可访问的 svg 图;
(其他命令自行摸索)
Windows 下自动生成.svg 文件且调用默认浏览器访问;
MacOS 下自动生成.gz 文件,系统限制可根据提示文件路径通过手动访问查看;

【注意事项】:
profile 文件为空的问题, heap 和 block 一般不受影响。
执行交互 web 命令会报:

1
2
3
(pprof) web
profile is empty
(pprof)

产生原因:
pprof 内存分析器采取抽样的方式,它仅仅从一些内存分配的子集中收集信息。有可能对一个对象的采样与被采样对象的大小成比例。通过使用 go test –memprofilerate 标识,或者通过程序启动时 的运行配置中的 MemProfileRate 变量来改变调整这个采样的比例。如果比例为 1,则会导致全部申请的信息都会被收集,但是这样的话将会使得执行变慢。默认的采样比例是每 512KB 的内存申请就采样一次。

  • 方法 1).在进行调试时,指定运行参数,或运行代码中动态调整参数
    1
    go tool pprof --text http://localhost:8080/debug/pprof/profile
    此命令将会打印耗费最多 CPU 时间的函数列表。
    这里有几种可用的输出形式,最实用的有 –text, –web 和 –list。运行 “go tool pprof” 来得到完整的列表。

【备注】:
实际测试时,MacOS 下基本是空的,需要指定参数。

  • 方法 2).设置环境变量(此方法极不推荐!)设置 Go 环境变量 GODEBUG=”memprofilerate=1”.

  • 通过控制采样的比例和行为,可以达到性能调试粒度的控制!

Go tool pprof 性能监控调试工具基本使用说明

https://www.wdft.com/2188b831.html

Author

Jaco Liu

Posted on

2020-02-27

Updated on

2025-12-24

Licensed under