golang pprof使用

本文详细介绍了如何使用Go语言的pprof工具进行性能分析,包括CPU使用、内存占用、goroutine跟踪和死锁检查,以及对比分析内存增长。通过实例展示如何下载和解读不同类型的profile,以及利用heap和goroutine profile解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过交互终端使用

# 下载 cpu profile,默认从当前开始收集 30s 的 cpu 使用情况,需要等待 30s
go tool pprof http://localhost:8888/debug/pprof/profile
# wait 120s
go tool pprof http://localhost:8888/debug/pprof/profile?seconds=120     

# 下载 heap profile
go tool pprof http://localhost:8888/debug/pprof/heap

# 下载 goroutine profile
go tool pprof http://localhost:8888/debug/pprof/goroutine

# 下载 block profile
go tool pprof http://localhost:8888/debug/pprof/block
需要	runtime.SetBlockProfileRate(1)     // 开启对阻塞操作的跟踪
	
# 下载 mutex profile
go tool pprof http://localhost:8888/debug/pprof/mutex
需要 	runtime.SetMutexProfileFraction(1) // 开启对锁调用的跟踪

## 启动web页面
go tool pprof -http=0.0.0.0:8000 http://localhost:10217/debug/pprof/profile?seconds=120

## 分析已经生成好的文件
# 启动web页面
go tool pprof -http=0.0.0.0:8000 pprof.zone.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz
# 命令行操作
go tool pprof pprof.zone.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz

CPU分析

go tool pprof http://localhost:8888/debug/pprof/profile

内存占用分析

go tool pprof -sample_index=alloc_space http://localhost:8888/debug/pprof/heap 

请添加图片描述

定位死锁和协程泄露

  1. 查看某条调用路径上,当前阻塞在此goroutine的数量
go tool pprof http://localhost:8888/debug/pprof/goroutine?debug=1  
curl http://localhost:8888/debug/pprof/goroutine?debug=1 > /tmp/pprof1.txt  

请添加图片描述
2. 查看所有goroutine的运行栈

go tool pprof http://localhost:8888/debug/pprof/goroutine?debug=2  
curl http://localhost:8888/debug/pprof/goroutine?debug=2 > /tmp/pprof2.txt  

请添加图片描述

使用heap发现内存问题

  1. 核查内存异常增长的问题
go tool pprof http://localhost:8888/debug/pprof/heap
pprof.demo2.001.pb.gz
pprof.demo2.002.pb.gz 

使用base能够对比两个profile文件的差别,就像diff命令一样显示出增加和减少的变化

go tool pprof –base pprof.demo2.001.pb.gz pprof.demo2.002.pb.gz

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值