解决: golang 展示的pprof 对应的source看不到

792 阅读1分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

使用 go tool pprof 来观察所属golang项目的CPU,内存消耗情况

关于pprof的使用可自行搜索,本文默认你已经会使用pprof了 go tool pprof -http=:8080 xxxx

image.png 在执行上述命令后,可进入对应web页面进行查看

image.png

从上图可以看出在pprof页面中,原本正常应该显示的source,却被 '???' 给代替了,做为一个程序猿,这点就很难受。在查看pprof的源码之后,会发现其原因为找不到项目中的源代码,所以被'???'给替换了。

image.png

其代码路径在: pprof/internal/report/source.go

因此带来问题考虑: "为什么找不到源代码?明明go可以正常运行",带着这个问题的疑问去代码中搜索其控制源代码路径的命令,发现如下 source_path:

image.png

若对应的 source 代码为 ??? ,可以执行 go tool pprof xxx

再执行 top 10 ;

list

image.png 可观察到其文件没找到导致。

golang环境的安装方式

本机(Mac)安装golang采用 brew install go,使用go env 查看环境变量,可以看出 GOPATH设置为了项目目录("/Users/whoops/Desktop/project"),而实际上的Golang 可运行环境在"/usr/local/Cellar/go/1.19.5/libexec" 下

image.png

因此,需要配置 --source_path,来配置source的来源

go tool pprof --source_path /usr/local/Cellar/go/1.19.5/libexec/src Desktop/cpu_profile547553259

image.png

image.png

image.png

从上图可以看到其中还是存在部分代码为 '???',可以考虑代码版本与运行版本是否一致?这个问题就留给大家去思考了。有结果可评论交流~