首页 > 其他分享 >Go性能分析-pprof

Go性能分析-pprof

时间:2024-04-11 09:46:01浏览次数:17  
标签:http 耗时 pprof 性能 30 debug go Go

背景

go语言的性能分析工具pprof,公司很多人写过相关介绍,本文主要是做一个总结及完善~

说明:要使用pprof,需要先注册(比如注册到Gin的80端口)

相关文档

 

pprof使用

pprof 网页地址

默认地址:http://<ip>:<port>/debug/pprof/

profile项 说明 其他
allocs 采样某段事件内所有分配过的内存。默认是程序启动到现在

不指定是生成protobuf二进制文件

?debug=1  以文本方式查看

?seconds=30  30秒内的内存情况

block 查看导致阻塞的堆栈跟踪

类似allocs

cmdline 当前程序的命令行完整调用路径  
goroutine 查看当前所有运行的goroutine堆栈

不指定是生成protobuf二进制文件

?debug=1   查看goroutine数量

?debug=2  查看每个goroutine 详细信息

?seconds=30  30秒内的goroutine堆栈情况

heap 查看活动对象的内存分配情况 类似allocs
mutex 查看导致互斥锁的竞争持有者的堆栈跟踪 类似allocs
profile 追踪不同函数占用CPU的时间(得到一个profile文件)。默认30秒 可以使用 go tool pprof 命令分析profile文件

pprof 性能分析命令

性能采集

默认开启30秒的采集(采集期间,会阻塞住,在这个时间内进行的操作就会被采集进去):

采集运行耗时

go tool pprof http://172.16.16.127:8012/debug/pprof/profile?seconds=30
 采集运行内存
go tool pprof http://172.16.16.127:8012/debug/pprof/heap?seconds=30

执行后,会出现 pprof 交互:

 top 命令

命令 说明
top 默认展示10个,按flat排序
top 5 展示5个,按flat排序
top 5 -cum 展示前5个,按cum排序

参数说明:

  • flat:一个函数内的directly操作的耗时(不包含子函数运行耗时)
  • cum:一个函数内的所有操作的耗时(包含子函数运行耗时)

查看函数具体耗时/内存

命令 说明 其他
list <pagefunc_name> 展示具体函数耗时/内存 示例: list git.qingteng.cn/ms-app-ids/service-ids/internal/ids_config/internal/config_task
web 生成一张svg格式的图片,展示耗时/内存流程图 需要安装 graphviz

网页查看

执行如下命令(随便一个都可以):

go tool pprof -http=:8001 http://172.16.16.127:8012/debug/pprof/profile
go tool pprof -http=:8001 cpu.out
go tool pprof -http=:8001 pprof/pprof.service-ids.samples.cpu.009.pb.gz

这会启动一个web服务器,并自动打开一个网页(端口自定义):

这样可以很方便的查看不同性能指标~

标签:http,耗时,pprof,性能,30,debug,go,Go
From: https://www.cnblogs.com/xuwenjin/p/18128049

相关文章

  • 深入浅出Go语言:反射应用解密!
    深入浅出Go语言:反射应用解密!原创 麻凡 麻凡 2024-03-0609:02 湖南 1人听过在Go语言编程中,反射是一项高级技术,能够在程序运行时检查变量和值的类型。你可能会问,为什么我们需要反射呢?让我们一起揭开这个神秘的面纱。为什么需要反射大多数情况下,我们在编写代码时都可......
  • #莫队二次离线,根号分治#洛谷 5398 [Ynoi2018] GOSICK
    题目\(m\)组询问求\(\sum_{l\leqi,j\leqr}[a_i\bmoda_j==0],n,m,a_i\leq5\times10^5\)分析设\(f(l,r,x)\)表示\(i或j\in[1,x],i或j\in[l,r]\)时的答案,\(g_x\)表示\([1,x]\)的答案,根号的做法可以通过三秒由于涉及区间内的求值,需要在莫队的基础上二次离线,那......
  • go写入配置文件
    packageinstallimport("fmt""io/ioutil""os"v2"gopkg.in/yaml.v2""github.com/fanux/sealos/net""github.com/fanux/sealos/pkg/logger")const(defaultConfigPath="......
  • goto语句
    今天给大家分享一个小知识----goto语句。goto语句就是可以随意无条件的转移语句,运用形式是:标记名:...        goto标记名;这两个中间可以写任意内容,标记名也可以在goto语句后面,位置随意。给大家分享一个好玩的例子:一个定时关机程序,输入我是小狗,取消关机,输......
  • django simpleui 的list_display添加自定义列、显示图片 及alert弹窗的设置方法
    参考djangosimpleui的list_display添加自定义列、显示图片及alert弹窗的设置方法-CSDN博客环境:python:3.8.xDjango:3.2.xDjango-simpleui:2021.x先定义下模型#models.pyclassDog(models.Model):name=models.CharField(max_length=15,verbose_name='小狗名字')......
  • 软件系统复杂度带来的问题--高性能
    复杂度来源:高性能       计算机,从电子管计算机到晶体管计算机再到集成电路计算机,运算性能从每秒几次提升到每秒几亿次。但伴随性能越来越高,相应的方法和系统复杂度也是越来越高。现代的计算机CPU集成了几亿颗晶体管,逻辑复杂度和制造复杂度相比最初的晶体管计算机,根本不......
  • 石墨烯发动机保护剂对汽车性能的提升:提高动力输出、燃油经济性和噪音控制
    在汽车工业的快速发展中,发动机性能的提升一直是技术研发的重点。随着新材料的不断涌现,石墨烯发动机保护剂作为一种创新产品,已经开始在市场上展现其独特的价值。中安新材料(深圳)有限公司生产的石墨烯发动机保护剂,利用石墨烯的优异性能,为汽车发动机提供了全面的保护和性能提升,特别......
  • Go 源码之旅-开篇
    欢迎来到《Go源码之旅》专栏!在这个专栏中,我们将深入探索Go编程语言的内部数据结构的工作原理,一起踏上一段令人兴奋的源码之旅。我们将一步步解析关键的数据结构底层工作原理以及一些常用框架的设计原理及其源码。无论你是初学者还是有经验的开发人员,这个专栏都将为你提......
  • 牛蛙!GoFrame2.7正式版的监控组件真是及时雨
    声明:本文首发在同名公众号:王中阳Go,未经授权禁止转载。......
  • 性能监控工具nmon下载配置
    我的服务器是centos7.8,官网下载nomon一、找到官网https://nmon.sourceforge.io/pmwiki.php  二、下载到被测服务器上wgethttp://sourceforge.net/projects/nmon/files/nmon16p_32_binaries_feb_2024.tar.gz解压文件执行启......