go性能工具pprof

ByteZenithX
• 阅读 1135

Go 语言自带的 pprof 库就可以分析程序的运行情况,并且提供可视化的功能。它包含两个相关的库:

  1. runtime/pprof
    对于只跑一次的程序,例如每天只跑一次的离线预处理程序,调用 pprof 包提供的函数,手动开启性能数据采集。
  2. net/http/pprof
    对于在线服务,对于一个 HTTP Server,访问 pprof 提供的 HTTP 接口,获得性能数据。当然,实际上这里底层也是调用的 runtime/pprof 提供的函数,封装成接口对外提供网络访问。

因为自己用gin比较多,所以使用github.com/gin-contrib/pprof,其实内部也就是上面两个库。使用非常简单。

var debugHttp *http.Server

func runPPROF() {
    g := gin.New()
    g.Use(gin.Recovery())
    g.Use(gin.Logger())

    pprof.Register(g)

    // 使用9000端口开启http服务
    debugHttp = &http.Server{
        Addr:    ":9000",
        Handler: g,
    }
    debugHttp.ListenAndServe()
}

开启之后可以web访问 http://127.0.0.1:9000/debug/p...可以查看实时数据,

go性能工具pprof

当然也可以查看某个时间段的性能情况:

// 监听60s性能情况,默认进入命令行
go tool pprof http://127.0.0.1:9000/debug/pprof/profile\?seconds\=60

go性能工具pprof

// 本地启动http服务查看,需要装graphviz插件
go tool pprof -http=:8080  ~/pprof/pprof.go.samples.cpu.032.pb.gz

go性能工具pprof

可以切换看占用最高的,还有火焰图等等,相当好用,一般性能瓶颈就在占用比较多的。

PS: 有时候线上可能没有开启,也可以使用perf去debug查看占用资源比较多的。

// 19323 端口号
perf record -p 19323
perf report

首发于blog https://github.13sai.com/2022/01/29/385/

点赞
收藏
评论区
推荐文章
爱库里 爱库里
4年前
部署Go语言项目的 N 种方法
本文以部署GoWeb程序为例,介绍了在CentOS7服务器上部署Go语言程序的若干方法。独立部署Go语言支持跨平台交叉编译,也就是说我们可以在Windows或Mac平台下编写代码,并且将代码编译成能够在Linuxamd64服务器上运行的程序。对于简单的项目,通常我们只需要将编译后的二进制文件拷贝到服务器上,然后设置为后台
Go语言性能剖析利器--pprof实战
关于pprof的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考Go社区资料,结合自己的经验,实战Go程序的性能分析与优化过程。
Stella981 Stella981
3年前
Python打包EXE文件
Python程序打包工具Python是一个脚本语言,被解释器解释执行。它的发布方式:.py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的)。.pyc文件:有些公司或个人因为机密或者各种原因,不愿意源码被运行者看到,可以使用pyc文件发布,pyc文件是
Easter79 Easter79
3年前
System类 和 Runtime 类
java程序在不同操作系统上运行时,可能需要取得平台相关属性,或者调用平台本地命令(如windows下sys32和system64下的可执行文件、本地其他语言写的函数等)来完成特定功能.java提供了System和Runtime两个类来与程序的运行平台交互。1.System类首先,看构造器(constructor),是一个私有的
Wesley13 Wesley13
3年前
Go 包的原理和使用
Go包的原理和使用包的引出在实际的开发中,我们往往需要在不同的文件中,去调用其它文件的定义的函数,比如main.go中,去使用utils.go文件中的函数,如何实现?包现在有两个程序员共同开发一个Go项目。程序员xiaoming希望定义函数Cal
Stella981 Stella981
3年前
Cache缓存及数据处理流程
第一,在应用程序中有三个线程存在:主线程(随activity的声明周期启动销毁)、feed初始化线程(进入程序时只运行一次,用于加载相册初始信息)、feed监听线程(一直在跑,监听相册和相片的变更)。第二,不考虑CacheService启动的主要流程归纳如下:1.首次进入程序Gallery调用onCreate,此时发送初始化消息进入
Stella981 Stella981
3年前
Linux应急响应(二):捕捉短连接
0x00前言​短连接(shortconnnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。在系统维护中,一般很难去察觉,需要借助网络安全设备或者抓包分析,才能够去发现。0x01应急场景​
Wesley13 Wesley13
3年前
C++程序性能分析
最近要对推送程序进行性能优化,找出程序的hotspots,程序是用VS2005,C写的,所以直接使用VS2005自带的性能分析工具对程序做了一次profiling。准备工作使用VS2005打开工程,在菜单“工具”下面有个“性能工具”的选项,点击右边的“性能向导”就可以开始新建一个性能测试项了。如:!性能测试的菜单项(http:
Vitess全局唯一ID生成的实现方案 | 京东云技术团队
为了标识一段数据,通常我们会为其指定一个唯一id,比如利用MySQL数据库中的自增主键。但是当数据量非常大时,仅靠数据库的自增主键是远远不够的,并且对于分布式数据库只依赖MySQL的自增id无法满足全局唯一的需求。因此,产生了多种解决方案,如UUID,Sn
流浪剑客 流浪剑客
1年前
JProfiler for Mac 14 附 注册码 支持M1
是一款针对Mac用户的专业Java性能分析工具,它可以帮助开发人员识别和解决Java应用程序的性能瓶颈和问题。JProfilerforMac提供了全面的分析和优化功能,包括实时监控Java应用程序的各个方面,如内存使用情况、CPU占用、线程活动和数据库访问
ByteZenithX
ByteZenithX
Lv1
上穷碧落下黄泉,两处茫茫皆不见。
文章
5
粉丝
0
获赞
0