搜索

golang使用pprof笔记


发布时间: 2022-11-24 20:31:00    浏览次数:54 次

==背景==

程序研发完之后,发现程序会异常结束,然后由容器重新拉起,重启的频率不定,为了排查这个问题,准备使用pprof找找线索。

 

==相关文档==

pprof性能调优

读懂pprof生成的报告

 

==我的程序==

我的程序是基于开源组件gmqtt,基于gmqtt增加了自定义插件,插件包括数据写入、连接状态监控、http接口服务等,其中,http接口服务用的是gin。

pprof支持对于http服务的数据采集,也支持非http服务的数据采集,我的这个程序中因为嵌入了http接口服务,就采用了http服务采集的方式。

而且由于集成的是gin框架,所以pprof数据采集就使用了“github.com/DeanThompson/ginpprof”

 

==程序修改==

1、引入组件

需要在gin的程序中,引入pprof组件:

go get github.com/DeanThompson/ginpprof

 

2、修改程序

在程序中使pprof生效,具体如下图所示:

engine := gin.Default()
ginpprof.Wrap(engine)

 

3、路由权限(可选)

由于我的程序中有jwt权限验证,需要为pprof开放接口访问权限,如下图所示:

当然了,也可以将jwt权限验证关闭,或者程序中如果没引入jwt权限验证,就可以不用做这个步骤了。

 

4、Web访问

启动程序之后,就可以通过浏览器打开pprof的web页面了

 

==pprof命令行交互==

【CPU耗时分析】

go tool pprof http://127.0.0.1:6912/debug/pprof/profile

 

【内存使用情况】

go tool pprof -inuse_space http://127.0.0.1:6912/debug/pprof/heap
-inuse_space:常驻内存占用
-inuse_objects:常驻内存分配
-alloc_space:临时内存占用
-alloc_objects:临时内存分配

 

【协程使用情况】

go tool pprof http://127.0.0.1:6912/debug/pprof/goroutine

 

==图形化==

在进行数据采集之前,如果需要将采集的数据图形化展示,需要安装一个工具:graphviz

1、下载工具

地址:https://graphviz.org/download/

 

2、环境变量

将graphviz加入环境变量,我直接用的windows版本。理由:简单

 

3、安装验证

打开cmd命令窗口,在任意路径输入dot -V,能够显示版本信息则安装正确

 

4、图形生成

比如在命令行窗口执行了协程使用情况的命令,之后会进入pprof命令,输入svg就可以生成svg图片

svg图片通过浏览器打开即可。

 

生成图如下所示:

 

 --END--

 

免责声明 golang使用pprof笔记,资源类别:文本, 浏览次数:54 次, 文件大小:-- , 由本站蜘蛛搜索收录2022-11-24 08:31:00。此页面由程序自动采集,只作交流和学习使用,本站不储存任何资源文件,如有侵权内容请联系我们举报删除, 感谢您对本站的支持。 原文链接:https://www.cnblogs.com/quchunhui/p/16923163.html