1.相关go代码
import _ "net/http/pprof"
// 监听端口
func main(){
go func() {
defer func() {
if r := recover(); r != nil {
log.Println(errors.New("灾难错误"), r)
}
}()
http.ListenAndServe("0.0.0.0:8899", nil)
}()
.....
}
2.访问链接
http://127.0.0.1:8899/debug/pprof/
3.参数说明
4.调试线上项目情况
内存分配情况: go tool pprof http://127.0.0.1:8899/debug/pprof/allocs
堆内存分配情况: go tool pprof http://127.0.0.1:8899/debug/pprof/heap
参数
用-inuse_space来分析程序常驻内存的占用情况;
用-alloc_objects来分析内存的临时分配情况,可以提高程序的运行速度
// 查看常驻内存占用情况
(例如 go tool pprof -inuse_space http://127.0.0.1:8899/debug/pprof/heap
goroutine分配: go tool pprof )
http://127.0.0.1:8899/debug/pprof/goroutine
cpu分配: go tool pprof http://127.0.0.1:8899/debug/pprof/profile\?seconds\=45
// cpu 默认采集是30s的情况, 可以自定义设置多少s
进入了交互模式可以输入命令: top20 ,查看前20,如下图:
对比前后文件差异
go tool pprof --http :9090 --base base.pb current.pb
命令,svg 可以生成火焰图,注意mac 要下载 ( brew install graphviz ),我这里m1有个路径的bug,需要 export HOMEBREW_BOTTLE_DOMAIN='' 再执行 brew install graphviz (https://blog.csdn.net/z302766296/article/details/121970524)
总的分析思路就是通过top 和traces 找出关键函数,再通过list 查看函数代码
5.如果是gin项目自带了检测
import "github.com/gin-contrib/pprof"
pprof.Register(g)