登录
首页 >  Golang >  Go问答

无法在现有服务器上使用 go tool pprof

来源:Golang技术栈

时间:2023-04-08 11:59:56 361浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《无法在现有服务器上使用 go tool pprof》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我有一个现有的 http 服务器,我想对其进行分析。我已经包含_ "net/http/pprof"在我的导入中,并且我已经运行了 http 服务器:

router := createRouter()
server := &http.Server {
    Addr:           ":8080",
    Handler:        router,
    ReadTimeout:    15*time.Second,
    WriteTimeout:   15*time.Second,
//  MaxHeaderBytes: 4096,
}

log.Fatal(server.ListenAndServe())

当我尝试访问http://localhost:8080/debug/pprof/ 时,我得到404 page not found.

这就是我go tool pprof在本地机器上使用时得到的:

userver@userver:~/Desktop/gotest$ go tool pprof http://192.168.0.27:8080/
Use of uninitialized value $prefix in concatenation (.) or string at /usr/lib/go/pkg/tool/linux_amd64/pprof line 3019.
Read http://192.168.0.27:8080/pprof/symbol
Failed to get the number of symbols from http://192.168.0.27:8080/pprof/symbol

userver@userver:~/Desktop/gotest$ go tool pprof http://localhost:8080/debug/pprof/profile
Read http://localhost:8080/debug/pprof/symbol
Failed to get the number of symbols from http://localhost:8080/debug/pprof/symbol

对于远程客户端也是如此:

MacBookAir:~ apple$ go tool pprof http://192.168.0.27:8080/
Use of uninitialized value $prefix in concatenation (.) or string at /usr/local/Cellar/go/1.3.2/libexec/pkg/tool/darwin_amd64/pprof line 3027.
Read http://192.168.0.27:8080/pprof/symbol
Failed to get the number of symbols from http://192.168.0.27:8080/pprof/symbol

正确答案

它没有在文档中明确提及,但net/http/pprof仅将其处理程序注册为http.DefaultServeMux.

从[来源](https://github.com/golang/go/blob/release- branch.go1.9/src/net/http/pprof/pprof.go#L72-L76):

func init() {
        http.Handle("/debug/pprof/", http.HandlerFunc(Index))
        http.Handle("/debug/pprof/cmdline", http.HandlerFunc(Cmdline))
        http.Handle("/debug/pprof/profile", http.HandlerFunc(Profile))
        http.Handle("/debug/pprof/symbol", http.HandlerFunc(Symbol))
        http.Handle("/debug/pprof/trace", http.HandlerFunc(Trace))
}

如果你没有使用默认的多路复用器,你只需要使用你正在使用的任何多路复用器注册任何/所有你想要的,例如,诸如此类的东西mymux.HandleFunc("鈥�", pprof.Index)

或者,您可以使用所示的默认多路复用器在单独的端口(如果需要,也可能仅绑定到本地主机)上侦听。

今天关于《无法在现有服务器上使用 go tool pprof》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>