golang使用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--