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:采样期间运行时间(默认)
知识改变世界