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)