将google/pprof集成在已有服务中的方法


本篇内容主要讲解“将google/pprof集成在已有服务中的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“将google/pprof集成在已有服务中的方法”吧!写一个监控服务 monitor server,用于分析 etcd 中注册的服务的状态。项目中的大多数服务都已经引入了 pprof 库,想要查看这些服务的 /debug/pprof 只需要走一层代理即可,这里用官方 httputil 库中的 httputil.NewSingleHostReverseProxy。到这里这个需求已经完成了 90%,可是到目前为止想要看火焰图就一定要先把 profile 文件下载到本地,再使用 pprof 或者 go tool pprof。那么有没有办法将 pprof 集成到现有服务中呢?当然有,我们先从 pprof 的 main 函数开始,注意是 google/pprof 库。可以看到官方提供了 option,完整的 option 包括:这些 option 并不需要全部更改,我们分开来讲。UI 接口 UI: newUI() 直接去掉,它主要用于终端交互控制。正如字面意思,这个接口用来 香港云主机解析 flag。由于我们不想将 flag 写在现有服务的执行脚本中,所以我们需要实现一个自定义的 Flagset 结构体。同时,还要解决 go 不支持重复定义 flag 的问题。结构体的内容根据所需要传入的参数为准,不同的项目可能不一样。需要改动的参数通过结构体内的变量传入,不需要的可以直接写死。参数的默认值可以在 google/pprof/internal/driver/commands.go 中查找。注意有一些默认值是必须赋值的,否则无法正常展示图片。Parse 方法返回文件名即可,不需要解析参数。到此为止,第一个 option 改动完成。如果不注册 HTTPServer 函数,pprof 会使用默认的 defaultWebServer。可以看到,在默认情况下,pprof 会自动监听。然而我们的服务已经启动监听,这些代码可以直接删掉,包括路由部分,建议写成项目同样的形式。handler 首先判断请求是否为本地请求,然后根据 path 注册对应的 handler。由于我们在上一步删除了路由部分 mux.Handle(),这些代码同样可以删除。需要注意的是,handler 是不可以重复注册的,为此我们需要加一个标志位。到此为止,第二个 option 完成。我们对以上得到的代码打包,将其写入 http 接口中。在启动 pprof 后,延迟三秒再重定向到 pprof 界面。表面上,这个需求已经做完了,但是。。。以上 pprof 是一次性的,在更换 profile 后重新读取生成的 webInterface 并不会重新注册到 handler 中。为了解决最后的这个问题,我们不得不更改 pprof 源码。对此我是抗拒的,不是不会改,也不是不好改,主要是 pprof 放在公司通用的 vendor 库中,我害怕影响到别的项目(为此我提交了一个 feature 给官方库,希望能有更好的解决方法)。在 internal/driver/webui.go 下进行如下改动,使 webI 可以被复用。至此,我们终于可以顺爽的看到火焰图啦。到此,相信大家对“将google/pprof集成在已有服务中的方法”有了更深的了解,不妨来实际操作一番吧!这里是开发云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: 电脑显示器如何选购

这篇文章主要介绍了电脑显示器如何选购的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇电脑显示器如何选购文章都会有所收获,下面我们一起来看看吧。1.显示器品牌市场上口碑较好的显示器主要有飞利浦、三星、AOC、明基、LG,另外还有华硕、…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/11 11:00
Next 08/11 11:00

相关推荐