如何在Golang net/http/pprof包中使用pprof.Symbol端点?
使用Golang net/http/pprof的Symbol端点
/debug/pprof/symbol 端点的核心作用是把内存地址解析为对应的程序符号信息(函数名、源码位置等),常用于分析堆快照、goroutine栈追踪里的未知地址。它支持GET和POST两种请求方式,具体用法如下:
GET方法使用
- 通过URL的
sym参数传递要解析的地址,多个地址用逗号分隔,地址可以是十进制或带0x前缀的十六进制格式。 - 示例命令:
curl "http://localhost:6060/debug/pprof/symbol?sym=0x45a8d0,0x45b210"
- 返回结果示例:
0x45a8d0 runtime.main /usr/local/go/src/runtime/proc.go:250 0x45b210 runtime.gopark /usr/local/go/src/runtime/proc.go:363
POST方法使用
- 当需要解析大量地址时,POST方式更高效,将每个地址单独一行放在请求体中发送。
- 示例命令:
curl -X POST -d $'0x45a8d0\n0x45b210' http://localhost:6060/debug/pprof/symbol
- 返回格式和GET一致,每个地址对应一行符号信息。
注意事项
- 确保你的Go服务已经隐式导入
net/http/pprof包(通常写_ "net/http/pprof"),这样pprof的handler才会被注册到默认的http服务中,同时服务要监听一个可访问的端口(比如6060是pprof常用端口)。 - 如果传入的地址没有对应的符号信息,会返回
??占位,示例:
0x123456 ?? ??:0
- 生产环境部署时,要做好pprof端点的权限控制,避免未授权访问带来的安全风险。
内容的提问来源于stack exchange,提问作者Zhasulan Berdibekov
相关产品推荐
相关产品推荐

