golang使用pprof笔记

==背景==

程序研发完之后,发现程序会异常结束,然后由容器重新拉起,重启的频率不定,为了排查这个问题,准备使用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://47.100.59.87:6912/debug/pprof/heap
go tool pprof -inuse_objects http://47.100.59.87:6912/debug/pprof/heap

服务启动以来总共分配的内存情况:
go tool pprof -alloc_space http://47.100.59.87:6912/debug/pprof/heap
go tool pprof -alloc_objects http://47.100.59.87:6912/debug/pprof/heap

 

【协程使用情况】

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--

 

posted @ 2022-11-24 20:25  大墨垂杨  阅读(684)  评论(0编辑  收藏  举报