“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情”
使用 go tool pprof 来观察所属golang项目的CPU,内存消耗情况
关于pprof的使用可自行搜索,本文默认你已经会使用pprof了 go tool pprof -http=:8080 xxxx
在执行上述命令后,可进入对应web页面进行查看
从上图可以看出在pprof页面中,原本正常应该显示的source,却被 '???' 给代替了,做为一个程序猿,这点就很难受。在查看pprof的源码之后,会发现其原因为找不到项目中的源代码,所以被'???'给替换了。
其代码路径在: pprof/internal/report/source.go
因此带来问题考虑: "为什么找不到源代码?明明go可以正常运行",带着这个问题的疑问去代码中搜索其控制源代码路径的命令,发现如下 source_path:
若对应的 source 代码为 ??? ,可以执行
go tool pprof xxx再执行
top 10;
list
可观察到其文件没找到导致。
golang环境的安装方式
本机(Mac)安装golang采用 brew install go,使用go env 查看环境变量,可以看出 GOPATH设置为了项目目录("/Users/whoops/Desktop/project"),而实际上的Golang 可运行环境在"/usr/local/Cellar/go/1.19.5/libexec" 下
因此,需要配置 --source_path,来配置source的来源
go tool pprof --source_path /usr/local/Cellar/go/1.19.5/libexec/src Desktop/cpu_profile547553259
从上图可以看到其中还是存在部分代码为 '???',可以考虑代码版本与运行版本是否一致?这个问题就留给大家去思考了。有结果可评论交流~