问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Go性能分析-pprof

创作时间:
作者:
@小白创作中心

Go性能分析-pprof

引用
1
来源
1.
https://www.cnblogs.com/xuwenjin/p/18128049

背景

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

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

相关文档

pprof使用

pprof 网页地址

默认地址:http://:/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:一个函数内的所有操作的耗时(包含子函数运行耗时)

查看函数具体耗时/内存

网页查看

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

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:采样期间运行时间(默认)
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号