拥有其他所有东西时,golang no / debug / pprof / profile端点为cpu

时间:2017-05-19 08:51:25

标签: go profiling

我对我无法分析golang程序的问题感到困惑,我在/ debug / pprof下有所有其他端点,但没有/ debug / pprof / profile用于CPU分析 有没有人偶然发现过这样的问题?

go tool pprof http://localhost:7778/debug/pprof/profile
Fetching profile from http://localhost:7778/debug/pprof/profile
Please wait... (30s)
server response: 404 Not Found

/debug/pprof/

profiles:
19  block
31  goroutine
10  heap
0   mutex
11  threadcreate

full goroutine stack dump

我以这种方式设置分析

r := http.NewServeMux()
r.Handle("/debug/pprof/", http.HandlerFunc(pprof.Index))

可能是什么原因?

更新:正在运行

http.ListenAndServe("localhost:4444", nil)

(即启动默认的http服务器)修复了我的自定义端点

的问题

2 个答案:

答案 0 :(得分:1)

找到它,我没有在init中注册所有处理程序 https://golang.org/src/net/http/pprof/pprof.go

答案 1 :(得分:0)

我偶然发现了与您相同的错误,我已经根据文档进行了全部注册。如果有人遇到相同的问题,原来您需要添加http.DefaultServeMux,因此完整的行应为:

  r := mux.NewRouter()

  r.PathPrefix("/debug/").Handler(http.DefaultServeMux)

  r.HandleFunc("/debug/pprof/", pprof.Index)
  r.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
  r.HandleFunc("/debug/pprof/profile", pprof.Profile)
  r.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
  r.HandleFunc("/debug/pprof/trace", pprof.Trace)

引用为here