首页 > 其他分享 >golang之性能分析工具pprof

golang之性能分析工具pprof

时间:2023-08-08 09:03:13浏览次数:42  
标签:profile pprof svg 性能 golang HOST debug gin

PProf 是一个 Go 程序性能分析工具,可以分析 CPU、内存等性能。Go 在语言层面上集成了 profile 采样工具,只需在代码中简单地引入 runtime/ppro 或者 net/http/pprof 包即可获取程序的 profile 文件,并通过该文件来进行性能分析。

 

在 gin 中使用 pprof 功能,需要用到 github.com/gin-contrib/pprof middleware,使用时只需要调用 pprof.Register() 函数即可

go get  github.com/gin-contrib/pprof

 

使用:

package router

import (
    "github.com/gin-contrib/pprof"
    ....
)

// Load loads the middlewares, routes, handlers.
func Load(g *gin.Engine, mw ...gin.HandlerFunc) *gin.Engine {
    // pprof router
    pprof.Register(g)
    ....
}

更多使用方式: github.com/gin-contrib/pprof

 

分析命令:

go tool pprof http://127.0.0.1:8080/debug/pprof/pro

 

  • allocs:查看过去所有内存分配的样本,访问路径为 $HOST/debug/pprof/allocs
  • block:查看导致阻塞同步的堆栈跟踪,访问路径为 $HOST/debug/pprof/block
  • cmdline: 当前程序的命令行的完整调用路径。
  • goroutine:查看当前所有运行的 goroutines 堆栈跟踪,访问路径为 $HOST/debug/pprof/goroutine
  • heap:查看活动对象的内存分配情况, 访问路径为 $HOST/debug/pprof/heap
  • mutex:查看导致互斥锁的竞争持有者的堆栈跟踪,访问路径为 $HOST/debug/pprof/mutex
  • profile: 默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件,访问路径为 $HOST/debug/pprof/profile
  • threadcreate:查看创建新 OS 线程的堆栈跟踪,访问路径为 $HOST/debug/pprof/threadcreate

 

获取profile采集信息

go tool pprof http://127.0.0.1:8080/debug/pprof/profile

也可以通过浏览器访问该地址来获取当前服务状态, 包含CPU和内存情况

 

 

 

性能分析:

基于以上获取到的程序的profile信息,并且进入到的pprof交互界面,就可以在界面上执行topN获取采集信息

 

通过topN的输出可以分析出那些函数占用的CPU时间片最多,那些函数可能存在性能问题.

 

还可以使用svg来生成svg文件

 

前提需要下载并安装Graphviz: https://graphviz.org/

重新分析文件:

go tool pprof .\pprof.___3boss_api.exe.samples.cpu.001.pb.gz

 

在交互界面键入: svg 则会生成svg文件,点击打开即可

 

 

 

在交互式页面中,还有更多命令的支持, help查看

# 查看耗时的前几位
topN

# 生成svg文件
svg

# 在浏览器中打开
web

 

 

 

 

常见问题:

1.在gin框架中使用pprof分析报,执行采样命令后报:profile duration exceeds server's WriteTimeout 

解决: 这是执行go tool pprof http://x.x.x.x:8000/debug/pprof/profile之后,会等待30s中,进行采样操作, 如果超过了框架设置的WriteTimeout时间的话,就会报这个错误, 可以调整该属性

 

 

更多使用:

 

标签:profile,pprof,svg,性能,golang,HOST,debug,gin
From: https://www.cnblogs.com/xingxia/p/golang_pprof.html

相关文章

  • C#性能优化-树形结构递归优化
    前言大家好,我是wacky,最近在工作中遇到一个有趣的问题,同事反馈说WPF中有一个树形结构的集合,在加载时会直接报堆栈溢出,一直没时间(懒得)看,导致很久了也没人解决掉。于是,组长就把这个"艰巨"的任务交给了我。作为新人中的"高手",必然要义不容辞地接受挑战喽,废话不多说,走起。分析由于......
  • [golang]使用mTLS双向加密认证http通信
    前言假设一个场景,服务端部署在内网,客户端需要通过暴露在公网的nginx与服务端进行通信。为了避免在公网进行http明文通信造成的信息泄露,nginx与客户端之间的通信应当使用https协议,并且nginx也要验证客户端的身份,也就是mTLS双向加密认证通信。这条通信链路有三个角色:服务端、N......
  • Go / Golang JSON 一些心得
    自定义序列化和反序列化可以实现json.Marshaler和json.Unmarshaler自定义json的序列化和反序列化typeTags[]stringfunc(tTags)MarshalJSON()([]byte,error){return[]byte(strconv.Quote(strings.Join(t,","))),nil}func(t*Tags)UnmarshalJSON(b[]b......
  • 性能测试-基础篇
    前言:性能是什么 每个人眼里对性能理解不一样,但是我们如果从一个App的维度来看: 用户眼中的性能:1、App使用崩溃,卡顿,延迟2、App反应慢,使用页面无反应 那开发眼中的性能:1、数据库设计是否合理2、代码逻辑、算法是否可以优化 运维眼中的性能:1、服务器资源使用是否合理......
  • m基于QPSK+LDPC的载波同步和定时同步matlab性能仿真,包括Costas和gardner环,LDPC,四倍
    1.算法仿真效果matlab2022a仿真结果如下:本程序在博主之前的《基于QPSK的载波同步和定时同步性能仿真,包括Costas环的gardner环》算法基础上,加入了LDPC编译码进行仿真。2.算法涉及理论知识概要载波同步是相干解调的基础,不管对于模拟通信还是数字通信来说,只要是相干解调,接收端......
  • Perf性能分析工具
    Perf全名是PerformanceEvent,是在Linux2.6.31以后内建的系统效能分析工具,它随着核心一并释出。藉由perf,应用程式可以利用PMU(PerformanceMonitoringUnit),tracepoint和核心内部的特殊计数器(counter)来进行统计,另外还能同时分析运行中的核心程式码,从而更全面了解应用程式......
  • m基于QPSK+LDPC的载波同步和定时同步matlab性能仿真,包括Costas和gardner环,LDPC,四倍
    1.算法仿真效果matlab2022a仿真结果如下:   本程序在博主之前的 《基于QPSK的载波同步和定时同步性能仿真,包括Costas环的gardner环》 算法基础上,加入了LDPC编译码进行仿真。 2.算法涉及理论知识概要       载波同步是相干解调的基础,不管对于模拟通信还......
  • Linux 性能分析工具Perf
    Perf全名是Performance Event,是在Linux 2.6.31 以后内建的系统效能分析工具,它随着核心一并释出。藉由perf,应用程式可以利用PMU (Performance Monitoring Unit), tracepoint 和核心内部的特殊计数器(counter) 来进行统计,另外还能同时分析运行中的核心程式码,从而更全面了解......
  • golang之浮点数处理库decimal
    decimal库包是用来解决float类型对象之间运算不准确的问题的。所以,如果你想使用decimal库包,你必须先把float类型对象通过decimal.NewFromFloat()函数转成decimal.Decimal类型,然后再计算,最后还得再转成你所需要的类型。范例:packagemainimport"log"funcmain(){a:=......
  • UM2080F32基于ARM Cortex-M0+内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发
    UM2080F32是基于ARMCortex-M0+内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。工作于200MHz~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持FEC功能,同时内部集成了完整的射频接收机、射频发射机、频率综合器、调制解......