代码引入pprof
import (
	"net/http"
	_ "net/http/pprof"
)
func main() {
	go func() {
		http.ListenAndServe("0.0.0.0:60001", nil)
	}()
	//...
	select {}
}

上述事例我暴露出得端口号为60001,可自定义一个未使用的端口号即可

WEB访问模式

直接打开浏览器输入http://ip:60001/debug/pprof
上述的IP为程序所执行的环境暴露的IP地址;

命令行模式定位内存
#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/heap
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.malg
命令行模式定位耗时
#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/profile
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.scanobject
命令行模式定位内存分配
#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/allocs
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.scanobject

# 命令行模式定位协程泄漏
```shell
#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/goroutine
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.scanobject

# 命令行模式定位锁竞争
```shell
#可访问目标主机的linux系统或者本机
go tool pprof -inuse_space http://ip:60001/debug/pprof/mutex
#查看
#(pprof) top
top
#命令结果会显示排行前十的内存占用函数通过
#(pprof) list <函数名>可以查看到详细的信息
list runtime.scanobject