pprof包文档说
该包通常仅为注册其HTTP处理程序的副作用而导入。处理的路径都以/debug/pprof/.">
开头
文档说,如果你已经有一个http服务器运行,你不需要启动另一个,但如果你没有使用DefaultServeMux,你将不得不注册处理程序与你正在使用的mux。
我不应该总是为pprof使用单独的端口吗?是否可以使用与prometheus指标相同的端口?
net/http/pprof
是一个便利包。它总是在DefaultServeMux
上注册处理程序,因为DefaultServeMux
是一个全局变量,它实际上可以这样做。
如果你想在其他ServeMux
上提供pprof结果,那真的没什么。它所需要的只是用http.ResponseWriter
调用runtime/pprof.StartCPUProfile(w)
,然后休眠,或者在runtime/pprof.Profile
对象上调用p.WriteTo(w, debug)
。您可以查看net/http/pprof的源代码来了解它是如何做到的。
在稍微好一点的情况下,net/http/pprof
将有一个可以在任何地方使用的RegisterHandlers(*http.ServeMux)
函数,您可以在没有隐式注册任何内容的情况下导入它,并且将有另一个包(例如net/http/pprof/sugar
)除了在其init
中调用pprof.RegisterHandlers(http.DefaultServeMux)
之外什么都不做。然而,我们并不生活在那个宇宙中。