首页 > 其他分享 >golang使用pprof笔记

golang使用pprof笔记

时间:2022-11-24 20:33:05浏览次数:59  
标签:http pprof 程序 笔记 golang 内存 go gin

==背景==

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

 

标签:http,pprof,程序,笔记,golang,内存,go,gin
From: https://www.cnblogs.com/quchunhui/p/16923163.html

相关文章

  • springboot自定义starter源码笔记
    starter:1、这个场景需要使用到的依赖是什么?2、如何编写自动配置@Configuration//指定这个类是一个配置类@ConditionalOnXXX//在指定条件成立的情况下自动配置类生效@Aut......
  • 机器学习 数学基础 学习笔记 (5)常见统计量
    1.期望离散型随机变量的一切可能的取值xi与对应的概率Pi(=xi)之积的和称为该离散型随机变量的数学期望(设级数绝对收敛),记为E(x)。随机变量最基本的数学特征之一。它反映随机......
  • golang 反向代理 Gin框架反向代理详解
    前言想用gin框架做一个反向代理服务,搜索了一圈,全是只讲解些皮毛的帖子,今天我就总结一下gin做反向代理的详细操作和原理正文开始之前我们先了解一些前置知识gin的通配符......
  • DockerFile解析-笔记-全
    是什么DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。构建三步骤:   编写dockerfile文件   dockerbuild   dockerrun文件什么......
  • java基础笔记
    一、泛型受限1、类型通配符上限:类/接口<?extends实参类型>要求该泛型的类型只能是实参类型,或者实参类型的子类类型 2、类型通配符下限:类/接口<?extends实参类型>要......
  • 【JAVA笔记】JAVA常用的字符串操作03
    一、Java中常用的字符串操作publicclassCommon_String_Operations{publicstaticvoidmain(String[]args){booleanp1=isEmpty("aa");S......
  • docker笔记
    一、docker简介1.什么是dockerDocker是一个开源的应用容器引擎,由于docker影响巨大,今天也用"Docker"指代容器化技术。2.docker的优势一键部署,开箱即用......
  • Vue学习笔记(2)
    31.父子组件通信1.父亲给儿子通信利用props2.儿子给父亲通信,先利用props让父亲给儿子传个函数,再让儿子再调用函数32.todolist案例总结组件化编码流程:(1).拆分静态组......
  • 初学银河麒麟linux笔记 第五章 windows中开发的QT程序适配linux的修改——外部控件重
    本人在WINDOWS系统中使用了“飞扬青云”的控件https://gitee.com/feiyangqingyun/QUCSDK由于系统移植,调用库应改为linux系统,首先下载对应版本的库,我windows上使用的是QT.......
  • 【go】go微服务框架kratos学习笔记十(熔断器)
    什么是熔断假设存在这样的调用链:服务A->服务B->服务C如果服Ccrash或者一些原因导致不可用,服B可能会阻塞很多线程/协程,如果短时间内大量积压,导致系统资源耗尽服B......