Go性能分析-pprof

背景

go语言的性能分析工具pprof,公司很多人写过相关介绍,本文主要是做一个总结及完善~

说明:要使用pprof,需要先注册(比如注册到Gin的80端口)

相关文档

pprof使用

pprof 网页地址

默认地址:http://<ip>:<port>/debug/pprof/

profile项
说明
其他
allocs 采样某段事件内所有分配过的内存。默认是程序启动到现在

不指定是生成protobuf二进制文件

?debug=1  以文本方式查看

?seconds=30  30秒内的内存情况

block 查看导致阻塞的堆栈跟踪

类似allocs

cmdline 当前程序的命令行完整调用路径  
goroutine 查看当前所有运行的goroutine堆栈

不指定是生成protobuf二进制文件

?debug=1   查看goroutine数量

?debug=2  查看每个goroutine 详细信息

?seconds=30  30秒内的goroutine堆栈情况

heap 查看活动对象的内存分配情况 类似allocs
mutex 查看导致互斥锁的竞争持有者的堆栈跟踪 类似allocs
profile 追踪不同函数占用CPU的时间(得到一个profile文件)。默认30秒 可以使用 go tool pprof 命令分析profile文件

pprof 性能分析命令

性能采集

默认开启30秒的采集(采集期间,会阻塞住,在这个时间内进行的操作就会被采集进去):

采集运行耗时

go tool pprof http://172.16.16.127:8012/debug/pprof/profile?seconds=30
 采集运行内存
go tool pprof http://172.16.16.127:8012/debug/pprof/heap?seconds=30

执行后,会出现 pprof 交互:

 top 命令

命令
说明
top 默认展示10个,按flat排序
top 5 展示5个,按flat排序
top 5 -cum 展示前5个,按cum排序

参数说明:

  • flat:一个函数内的directly操作的耗时(不包含子函数运行耗时)
  • cum:一个函数内的所有操作的耗时(包含子函数运行耗时)

查看函数具体耗时/内存

命令
说明
其他
list <pagefunc_name> 展示具体函数耗时/内存 示例: list git.qingteng.cn/ms-app-ids/service-ids/internal/ids_config/internal/config_task
web 生成一张svg格式的图片,展示耗时/内存流程图 需要安装 graphviz

网页查看

执行如下命令(随便一个都可以):

go tool pprof -http=:8001 http://172.16.16.127:8012/debug/pprof/profile
go tool pprof -http=:8001 cpu.out
go tool pprof -http=:8001 pprof/pprof.service-ids.samples.cpu.009.pb.gz

这会启动一个web服务器,并自动打开一个网页(端口自定义):

说明:

  • VIEW
    • Top:跟上面的top命令作用一样,点击表头可以很方便的排序
    • Graph:方法耗时流程图(cpu占用时长)
    • Flame Graph:方法耗时火焰图
    • Peek:类似于Top从高到底,多了calls、context等
  • SAMPLE:
    • samples:采样期间运行次数
    • cpu:采样期间运行时间(默认)
posted @ 2024-04-11 09:32  仅此而已-远方  阅读(139)  评论(0编辑  收藏  举报