Go | pprof

Golang性能调优(go-torch, go tool pprof) Go语言已经为开发者内置配套了很多性能调优监控的好工具和方法,这大大提升了我们profile分析的效率。此外本文还将重点介绍和推荐uber开源的go-torch,其生成的火焰图更方便更直观的帮我们进行性能调优。我也是在实际一次的性能调优中,接触到go-torch,非常棒。 阅读详情

Go | pprof

1. 简介

Go语言性能分析工作,通过HTTP接口来分析内存、CPU占用锁冲突问题等。

2. 服务端

Go默认HTTP Server

package main

import (
	"log"
	"net/http"
	// net/http/pprof包中init方法注册路由
	_ "net/http/pprof"
)

func main() {
	log.Println(http.ListenAndServe(":6060", nil))
}

gin框架

package main

import (
	"github.com/gin-gonic/gin"
	"net/http/pprof"
)

func main() {
	r := gin.Default()
	r.GET("/debug/pprof/:name", func(c *gin.Context) {
		pprof.Index(c.Writer, c.Request)
	})
	r.GET("/debug/pprof/cmdline", func(c *gin.Context) {
		pprof.Cmdline(c.Writer, c.Request)
	})
	r.GET("/debug/pprof/profile", func(c *gin.Context) {
		pprof.Profile(c.Writer, c.Request)
	})
	r.GET("/debug/pprof/symbol", func(c *gin.Context) {
		pprof.Symbol(c.Writer, c.Request)
	})
	r.GET("/debug/pprof/trace", func(c *gin.Context) {
		pprof.Trace(c.Writer, c.Request)
	})
	r.Run(":6060") // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

3. 客户端

3.1. 准备

需要提前安装graphviz,下面演示macOS安装方法

macOS:

brew install graphviz

3.2. 拉取和加载信息

下面两种方法都可以

使用命令直接查看

# 分析内存占用
go tool pprof http://localhost:6060/debug/pprof/heap

# 分析CPU占用
go tool pprof http://localhost:6060/debug/pprof/profile

将信息拉取到本地在查看

# 拉取内存信息
wget -O heap.out  http://localhost:6060/debug/pprof/heap

# 加载信息(交互式命令)
go tool pprof heap.out

3.3. 查看信息

注意当前已进入go tool pprof命令交互

查看占用内存最多10个

(pprof) top 10
Showing nodes accounting for 3586.70kB, 100% of 3586.70kB total
Showing top 10 nodes out of 37
      flat  flat%   sum%        cum   cum%
  513.31kB 14.31% 14.31%   513.31kB 14.31%  regexp/syntax.(*compiler).inst (inline)
  512.56kB 14.29% 28.60%   512.56kB 14.29%  runtime.allocm
  512.50kB 14.29% 42.89%   512.50kB 14.29%  regexp.makeOnePass
  512.20kB 14.28% 57.17%   512.20kB 14.28%  runtime.malg
  512.05kB 14.28% 71.45%   512.05kB 14.28%  regexp/syntax.simplify1 (inline)
  512.05kB 14.28% 85.72%   512.05kB 14.28%  text/template/parse.(*lexer).emit
  512.02kB 14.28%   100%   512.02kB 14.28%  text/template/parse.(*Tree).newList (inline)
         0     0%   100%  1537.87kB 42.88%  github.com/go-playground/validator/v10.init
         0     0%   100%   512.02kB 14.28%  html/template.(*Template).Parse
         0     0%   100%   512.02kB 14.28%  net/rpc.init

在网页已查看图示

(pprof) web

graph

查看更多命令

(pprof) help
输出内容太多省略

4. 参考

使用go pprof进行golang程序内存分析 use pprof to fix oom 阅读详情

相关推荐

golang 使用pprof和go-torch做性能分析

软件开发过程中,项目上线并不是终点。上线后,还要对程序的取样分析运行情况,并重构现有的功能,让程序执行更高效更稳写。 golang的工具包内自带pprof功能,使找出程序中占内存和CPU较多的部分功能方便了不少。加上uber的火焰图,可视化显示,让我们在分析程序时更简单明了。pprof有两个包用来分析程序一个是net/http/pprof另一个是runtime/pprof,net/http/pprof只是对runtime/pprof包进行封装并用http暴露出来,如下图源码所示: 使用net/..

dz45693的专栏 1473

Golang工程经验

  学习入门快;让开发者开发更为简洁不用关心内存分配和释放,gc会帮我们处理;效率性能高;不用自己去实现一些基础数据结构,官方或者开源库可以直接import引用;struct 和 interface 可以实现类、继承等面向对象的操作模式;初始化和赋值变量简洁;并发编程goroutine非常容易,结合chann可以很好的实现;Context能够自我控制开始、停止,传递上下文信息...

zouduchen的博客 600

一文搞定golang 之 pprof 性能优化

pprof是Go语言自带的性能分析工具。它可以帮助开发者了解程序的性能瓶颈,包括CPU使用情况、内存分配情况等诸多方面。通过`pprof`生成的性能分析数据,能够以可视化的方式展示程序的运行时行为,例如使用火焰图(FlameGraph)来展示函数调用栈和CPU占用时间的关系。

追求幸福,探索未知的博客 1497

记录一次C语言调用go生成的动态库的踩坑过程

按照中的总结。原因是在程序启动的时候,如果调用了go生成的so,那么go会调用一些函数建立go运行时环境,会创建一些线程。而我的新程序中,具体调用go函数的地方,是在子进程中调用的,而父进程fork子进程的时候,不会把go建立的那几个运行时线程复制到子进程中,即便在子进程中重新dlopen go生成的so也不会重新创建那几个运行时线程,所以导致go中那些涉及到一些需要运行时程序干预的代码(如gc等)无法正常运行。而我的go代码中刚好触发了GC,导致go无法运行,一直处在死循环之中。...

EmptyStupid的博客 1003

Go 性能剖析工具 pprof 与 Graphviz 教程

在 Golang 开发中,性能分析是确保应用高效运行的重要环节。本文介绍如何使用在 Gin 应用中集成性能剖析工具,并结合Graphviz生成图形化的性能分析结果,如火焰图。这套流程帮助开发者更好地理解和优化 Go 应用的性能。

GitHub个人仓库地址:https://github.com/feiyuluoye ; 个人塔罗牌占卜平台:http://118.126.82.12:8080/ ; 欢迎广大Coding友共同交流讨论。 1966

golang的pprof压测工具使用

环境: window 工具下载: graphviz 官网的失效啦,使用github上的下载 https://graphviz.gitlab.io/_pages/Download/Download_windows.html 需要将安装好的加入环境变量 C:\Program Files (x86)\Graphviz2.38\bin linux centos yum -y install g...

weixin_41745285的博客 869

golang性能分析 pprof的使用 graphviz_go pprof 查看cpu占用情况 graphviz

pprof:是golang 自带性能剖析工具,可以帮助定位程序中可能存在的问题,是go服务程序异常时辅助排查问题的有效工具。Graphviz:是开源的图形可视化软件。图形可视化是一种将结构信息表示为抽象图形和网络图的方法。它在网络,生物信息学,软件工程,数据库和网页设计,机器学习以及其他技术领域的可视化界面中具有重要的应用。因为pprof是原始输出数据,使用 Graphviz 可以将数据图形化展示。

2401_84248479的博客 849

10-142 6-4 查询厂商“D“生产的PC和便携式电脑的平均价格

分数 10全屏浏览题目切换布局作者 lhm单位 河北农业大学本题目要求编写SQL语句,查询厂商D生产的PC和便携式电脑的平均价格。

dqd66的博客 2748

一看就懂系列之Golang的pprof

前言 这是一篇给网友的文章,正好最近在研究分析golang的性能,我觉得是时候来一个了断了。 正文 1.一句话简介 Golang自带的一款开箱即用的性能监控和分析工具。 (全篇看的过程中没必要特意记忆、看完自然让你有不一样的感觉) 2.使用姿势? 2.1 runtime/pprof 手动调用runtime.StartCPUProfile/runtime.StopCPUProfile等API来进行...

咖啡色的羊驼 3385

S32K3xx系列DMA驱动实战:EB配置与Mcal接口应用全解析(含Adc硬件触发示例)

本文深入解析S32K3xx系列MCU的DMA驱动开发,涵盖EB工具配置与Mcal接口应用,特别包含ADC硬件触发示例。通过详细架构分析、实战配置步骤和工业级应用案例,帮助开发者掌握AUTOSAR环境下DMA高效数据传输技术,提升汽车电子和工业控制系统的性能。

weixin_29162439的博客 463

Mac用户福音:三步搞定PyMol开源版,告别许可证弹窗(附Homebrew/MacPorts安装指南)

本文为Mac用户提供三步安装PyMol开源版的详细指南,帮助科研人员告别许可证弹窗烦恼。通过Homebrew或MacPorts包管理器安装开源核心,并与商业版图形界面整合,实现无干扰的分子可视化研究体验。特别适合MacOS用户快速部署PyMol进行结构生物学分析。

weixin_28743405的博客 194

Golang pprof 使用

什么是 Profile? 在计算机性能调试领域里,profile就是对应用的画像,这里画像就是应用使用 CPU 和内存等情况,也就是说应用使用了多少 CPU 资源、都是哪些部分在使用、每个函数使用的比例是多少、有哪些函数在等待 CPU 资源等等。知道了这些,我们就能对应用进行规划,也能快速定位性能瓶颈。 Golang 是一个对性能特别看重的语言,因此语言中自带了 profile的库,这篇文...

winfield821的博客 1万+

基于PlatformIO与CMSIS的STM32库函数开发实战:从环境搭建到外设驱动

本文详细介绍了基于PlatformIO与CMSIS的STM32库函数开发实战,从环境搭建到外设驱动实现。通过对比传统IDE,PlatformIO结合CMSIS框架在跨平台开发、代码可移植性和调试体验上更具优势。文章包含PlatformIO.ini配置详解、GPIO/USART驱动开发实例及常见问题解决方案,帮助开发者高效完成STM32项目开发。

weixin_29190169的博客 421

golang 性能分析(pprof)

性能分析 从业务目标角度,通常我们的瓶颈出现在业务的通量和时延两个问题上 比如一个MySQL数据库,你从其他机器上对它发请求,每秒它能处理10万个请求,这个就是通量性能;每个请求的反应时间是0.5ms,这个就是时延性能 通量和时延是相互相承的两个量,当通量达到系统上限,时延就会大幅提高 一般而言,性能分析主要关注 CPU、内存、磁盘 IO、网络这些指标 runtime/pprof 适用...

firefly 5626

H3C-V7防火墙配置SSL VPN IP资源典型案例(华三)

H3C-V7防火墙配置SSL VPN IP资源典型案例(华三)

m0_68265458的博客 5163

如何对EMB电子机械制动器的热衰退问题进行优化

摘要 电子机械制动器(EMB)在新能源汽车和自动驾驶中具有重要应用价值,但其在高强度工况下会出现热衰退现象。本文分析了EMB热衰退的五大机理:摩擦副热效应、电机热衰退、减速机构热失效、温度对控制策略干扰以及结构设计导致的热积累。针对这些问题,提出了从材料、结构、控制三个维度的优化措施:升级耐高温材料、改进散热设计、优化控制算法等。通过"热生成抑制-热传导优化-热失效补偿"的系统方案,可有效改善EMB的热衰退问题,为智能汽车提供更可靠的制动保障。

m0_59012156的博客 342

白话 Golang pprof

有时,我们开发的 Golang 程序会出现 CPU 使用率达到 100%,内存使用量过大,死锁等问题,我们该如何定位上诉问题的具体位置,来解决程序的到性能问题呢?Go 是一个非常注重性能的语言,语言内置了里性能分析库 runtime/pprof、net/http/pprof 和配套的分析工具 go tool pprof。所以我们平时说的 golang pprof 实际上包含两部分: (1)编译到程序中的 runtime/pprof 和 net/http/pprof 包; (2)性能分析工具 go tool

Doublelv 的博客专栏。 3390

openclaw本地模型对接

使用是官方推荐的一种集成方式,它可以简化配置过程。但由于您的系统环境和之前复杂的配置历史,我为您梳理了一个核心流程,并增加了关键的“事后检查”步骤,以确保能从根本上解决问题。

suny8的专栏 2460

Golang pprof

Go tool pprof 1. 简介 Golang 是一个对性能特别看重的语言,因此语言中自带了 一些性能分析工具。可以生成相应的Profile(概要文件),譬如CPU Profile、Memory Profile、Block Profile、Mutex Profile、Goroutine Profile等等 CPU Profile:报告程序的 CPU 使用情况,按照一定频率采集应用程序在 CP...

u014023993的专栏 1505

【异常】Python环境中没有安装 `openpyxl` 模块提示ModuleNotFoundError: No module named ‘openpyxl‘

是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的库。只是示例版本号,你可以根据需要选择不同的版本。安装完成后,再次尝试运行你的程序,应该就不会再出现。,这表明你的Python环境中缺少。运行一个Python程序时遇到了。如果由于某些原因你无法直接使用。,你可以指定版本号来安装,这里。要解决这个问题,你需要安装。

奶爸的编程之路,也就一周冷个三天 3396

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

如何用pprof检测golang代码中的死锁

用golang做的后端项目,为了实现高性能,通常会在运行过程中开启多个goroutine,并行处理并发请求。 并发处理请求提升效率的同时,也引入了资源并发读写的场景,这通常会带来一些问题,比如同时读写一个map会导致程序panic,为此,我们需要为那些不应被多个goroutine同时访问的资源加锁。 一个复杂的后端项目,通常会包含很多很多的锁,我们很难保证我们写的程序不出现死锁,或者长时间的锁等待。锁的问题不像业务逻辑的问题那么容易被发现,它有时可能只是阻塞了某个goroutine,这种情况下整体的功能

djqueen的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

golang pprof 的原理分析

文章目录1. 写在最前面2. pprof 提供的能力2.1 查看方式3. pprof 使用3.1 server 服务3.2 非 server 服务4. pprof 源码分析4.1 思考4.2 细节说明4.2.1 SIGPROF 信号4.2.2 pprof 数据写入过程5. 碎碎念6. 参考资料 1. 写在最前面 最近在改面向集群 profiling 服务代码的时候,想到 golang 原生支持单机的 profiling。 原本对比两种实现的异同,但是目前并不能够完全理解集群 profiling 服务的实现原

phantom_111的博客 3045

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

golang 性能剖析pprof

作为一个golang coder,使用golang编写代码是基本的要求。 能够写出代码,并能够熟悉程序执行过程中各方面的性能指标,则是更上一层楼。 如果在程序出现性能问题的时候,可以快速定位和解决问题,那么写起代码来,会更加自信。 本文介绍的pprof,是golang 自带性能剖析工具,可以帮助定位程序中可能存在的问题。 1.引入pprof 例子代码如下: package main import...

翔云 2880
上一篇: LeetCode | 88. 合并两个有序数组
下一篇: 网络 | email
yimtcode
博客等级 码龄6年 205粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yimtcode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值