当前位置:首页 > 技术分析 > 正文内容

Golang使用pprof分析CPU占用_golang性能分析工具

ruisui883个月前 (02-07)技术分析14

接上文pprof基本使用,本篇详细介绍利用pprof 分析cpu使用情况。

进入分析界面

// 直接使用 http/pprof方式,也是最常用的方式
go tool pprof http://localhost:8080/debug/pprof/profile?seconds=30
//也可以使用离线方式,效果时一样的
curl -s http://localhost:8080/debug/pprof/profile?seconds=30 > cpu.prof
go tool pprof cpu.prof

常用的几种分析方法

  • top(N) 查看热点函数

N可以随意选择,会把CPU占用最大的前N个函数列举出来,如下图:


其中各列的含义如下,可以根据这些值做对应的分析:

flat :当前函数的执行时间,示例中是250ms。

flat% :当前函数执行占总时间比。示例中进程总耗时是600ms,占比为60.98%。

sum% :每行的sum%是当前行的flat% 加上当前行之前的行的所有flat%的总和,比如第一行为本身的flat%,第二行为当前行的flat%+第一行的flat%。是个统计值,能够看出topN函数占总耗时的比例。比如第二行的sum%=90.24%,说明topN中前两个函数总耗时占CPU总时间的90.24%,占比非常大了。

cum : 是指当前函数及其调用函数的总时间,示例中是340ms。比如a函数调用b函数,然后自身处理部分业务。那cum就是自身业务耗时加b函数从调用到返回的时间。和flat对比就可以看出flat内部函数调用具体耗时位置。

cum% : 同理cum%指cum占总时间的占比,实例中是82.93%。


  • 在上图的命令行中还有以下命令

介绍几种常用的命令:

可以可视化的看出函数间的调用关系。web、dot、eog、evince、gif、pdf、png等都是直接输出可视化的调用关系图。只是格式不同,具体可以参考help。每个字命令也可以通过help xx 查看使用方法。


可视化的调用关系图可以直观地看到每个函数的调用关系,以及CPU使用情况:

其中:白色方框中是整体信息,包含采集周期内的总耗时、采集时间戳等。

每个红色方框中,代表当前函数。

方框中的时间指当前函数占用的CPU时间,比例为占用总耗时的比例;

每个线条箭头上的数字表示调用者从调用函数到被调用函数返回的总耗时。比如图中第一个main函数调用demo函数耗时350ms,其中demo函数耗时10ms,demo函数又调用其他函数耗时为340ms,加起来的就是350ms。以此内推。如果红框中没有时间,表明当前函数直接调用了其他函数,没有耗时或者耗时不足以统计。其实可以看出和top命令很类似。不过能直观看出函数调用关系。 线条上也标记了inline调用的类型;

颜色越深,表明函数占用CPU时间越多。

火焰图

以上介绍的工具命令已经能够较直观的进行分析了。golang还有一种神器,更加直观的展示CPU占用的关系。使用方法如下:

  • 安装依赖工具
//安装go-torch 可以选择对应的版本,安装好之后确保$GOPATH/bin在系统$PATH环境变量中
//,或直接拷贝go-torch 到/usr/bin目录下。windows环境可以直接添加环境变量。
go install github.com/uber/go-torch@latest
// 安装 FlameGraph
// 把 FlameGraph 路径添加到$PATH下,这是个perl写的项目
git clone  github.com/brendangregg/FlameGraph.git
// 安装 graphviz,官网有各平台的安装方法
https://graphviz.org/download/ 
  • 生成火焰图

使用 go-torch -u http://127.0.0.1:8080,默认是采集30s,也可以加-t 指定时间。具体可以看go-torch help。 下图可以点击每个色块看具体情况。

同样也可以通过离线的cpu.prof文件来产生火焰图,如果生产环境不能安装go-torch工具的话,可以采用这种方式。

// 首先通过pprof 工具产生cpu.prof文件
curl -s http://localhost:8080/debug/pprof/profile?seconds=30 > cpu.prof
// 然后 利用go-torch工具生成或沿途
go-torch -b cpu.prof

利用pprof分析CPU占用就介绍到这里,每个业务代码优化cpu的问题不尽相同,排查到热点函数之后就可以有针对性的优化。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1747.html

标签: pprof
分享给朋友:

“Golang使用pprof分析CPU占用_golang性能分析工具” 的相关文章

Linux发行版Nobara更新39版本,号称“专为游戏玩家定制”

IT之家 12 月 27 日消息,Linux 发行版 Nobara 今天推出了 39 版本,主要改进了“Gamescope 合成器”,并更新了 OBS Studio、部分驱动程序及 Nautilus 文件管理器,小伙伴们可以点此访问项目地址。IT之家经过查询得知,Nobara 是一款基于 Fedor...

深入理解Vue.js组件通信:父子组件与子父组件数据交互详解

什么是Vue组件通讯 Vue.js 组件通信是指在 Vue 应用的不同组件之间进行数据交换和状态同步的过程。由于 Vue 的组件是基于单文件组件(SFCs)的模块化设计,每个组件都有自己的作用域,因此它们不能直接访问彼此的数据。为了使组件之间能够协同工作,Vue 提供了几种不同的通信方式。以下是 V...

「干货」通俗易懂的Deno 入门教程

作者: semlinker转发链接:https://mp.weixin.qq.com/s/2eqRTsf_z7Bcs6dziXe73Q一、Deno 简介Deno 是一个 JavaScript/TypeScript 的运行时,默认使用安全环境执行代码,有着卓越的开发体验。Deno 含有以下功能亮点:默...

Gitlab之间进行同步备份

目前,我们公司有两个研发团队,分别在北京和武汉,考虑到访问速度的问题,原有武汉的研发环境在近端部署。也就是北京和武汉分别有两套独立的研发管理环境,虽然这解决了近端访问速度的问题,但是管理上较为分散,比如研发环境备份和恢复就是最重要的问题之一。最近,处于对安全性和合规性的考虑,希望将北京和武汉的源代码...

内存问题探微

这篇文章是我在公司 TechDay 上分享的内容的文字实录版,本来不想写这么一篇冗长的文章,因为有不少的同学问是否能写一篇相关的文字版,本来没有的也就有了。说起来这是我第二次在 TechDay 上做的分享,四年前第一届 TechDay 不知天高地厚,上去讲了一个《MySQL 最佳实践》,现在想起来那...

2024最新版:前端性能优化方案汇总

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~Hello,大家好,我是 Sunday。前端性能优化一直是很多同学非常关注的问题,在日常的面试中也是经常会被问到的点。所以今天咱们就花一点时间来了解一下2024最新的...