【问题标题】:How to start a new http server or using an existing one for pprof?如何为 pprof 启动新的 http 服务器或使用现有的 http 服务器?
【发布时间】:2021-01-29 18:31:54
【问题描述】:

pprof 包文档说

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

文档说如果您已经运行了一个 http 服务器,则不需要启动另一个,但如果您没有使用 DefaultServeMux,则必须使用您正在使用的多路复用器注册处理程序。

我不应该总是为 pprof 使用单独的端口吗?可以使用我用于 prometheus 指标的同一端口吗?

【问题讨论】:

  • 暴露那个应用是不行的。如果您是为本地开发临时做的,然后将其从版本中删除 - 没关系。

标签: http go


【解决方案1】:

net/http/pprof 是一个便利包。它总是在DefaultServeMux 上注册处理程序,因为DefaultServeMux 是一个全局变量,它实际上可以这样做。

如果您想在其他 ServeMux 上提供 pprof 结果,那真的没什么;只需使用http.ResponseWriter 调用runtime/pprof.StartCPUProfile(w) 然后休眠,或者在runtime/pprof.Profile 对象上调用p.WriteTo(w, debug)。你可以看看source of net/http/pprof 看看它是怎么做的。

在一个稍微好一点的宇宙中,net/http/pprof 将有一个可以在任何地方使用的RegisterHandlers(*http.ServeMux) 函数,您可以在不隐式注册任何内容的情况下导入它,并且会有另一个包(比如net/http/pprof/sugar)除了在其init 中调用pprof.RegisterHandlers(http.DefaultServeMux) 之外什么也没做。然而,我们并不生活在那个宇宙中。

【讨论】:

    猜你喜欢
    • 2022-12-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2020-05-16
    • 2017-03-21
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多