如何启动新的http服务器或使用现有的http服务器进行pprof?



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)之外什么都不做。然而,我们并不生活在那个宇宙中。

最新更新