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

pprof包文档说

通常,导入包只是为了防止注册其 HTTP 处理程序的副作用。处理的路径都以 /debug/pprof/ 开头。

文档说,如果你已经运行了一个http服务器,你不需要启动另一个,但如果你没有使用DefaultServeMux,你将不得不向你正在使用的mux注册处理程序。

难道我不应该总是使用一个单独的端口来表示 pprof 吗?是否可以使用我用于普罗米修斯指标的相同端口?


精慕HU
浏览 250回答 1
1回答

MM们

net/http/pprof是一个方便的包。它总是在 上注册处理程序,因为它是一个全局变量,它实际上可以做到这一点。DefaultServeMuxDefaultServeMux如果你想在其他一些地方提供pprof结果,那真的没什么;它所需要的只是调用一个,然后睡觉,或者调用一个对象。你可以看看net/http/pprof的来源,看看它是如何做到的。ServeMuxruntime/pprof.StartCPUProfile(w)http.ResponseWriterp.WriteTo(w, debug)runtime/pprof.Profile在稍微好一点的宇宙中,将有一个可以在任何地方使用的函数,您将能够导入它而无需隐式注册任何内容,并且将有另一个包(例如)除了调用它之外什么都不做。然而,我们并不生活在那个宇宙中。net/http/pprofRegisterHandlers(*http.ServeMux)net/http/pprof/sugarpprof.RegisterHandlers(http.DefaultServeMux)init
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go